我正在寻找一种简单的方法,在Java中使用InputStream / OutputStream计算密文的HMAC(先加密再进行MAC,包括IV和算法参数)。
失败的尝试:我首先尝试从CipherOutputStream继承,但是它们不允许在写入后以编程方式检索密文--这导致我得出结论,只能实现MAC-then-encrypt。代码在此处:http://pastebin.com/armvDN3N
成功的尝试:然后,我使用OpenJDK7源代码中的CipherOutputStream作为基础来实现CipherHmacOutputStream类,每次调用write()时更新Hmac(mac.update()),并在调用close时将其附加到流中。代码在此处:http://pastebin.com/fF8WFBpA
你有任何想法吗?是否有任何标准方法可以做到这一点?
CipherOutputStream
和OutputStream
之间添加你的FilterOutputStream
来捕获密文。 - Dmitry Zaytsev