4

我正在用 java 实现一个密码库程序。我已经编写了一个用于加密的三重 DES 和一个用于散列的 SHA256。

我的问题是,如果我首先对原始数据(密码)进行哈希处理,然后对其进行加密,或者首先对数据(密码)进行加密,然后对加密数据进行哈希处理,会有什么不同。我最担心的是,它是否会在安全性方面做出任何重大改变。

谢谢

4

1 回答 1

2

根据您的评论,您不想仅使用哈希作为消息身份验证代码。有适合此应用程序的基于散列的 MAC(适当地称为HMAC )。在这种情况下,您可能想要使用 HMAC-SHA256。另外请记住,您的 MAC 需要一个单独的密钥(使用相同的密钥进行加密,MAC 是一个很大的禁忌)。

但是就您的问题本身而言,您的问题归结为 Encrypt-then-MAC vs MAC-then-Encrypt。根据这个Crypto.SE 答案,最好的做法是先加密然后 MAC,只要您确保对密文的所有内容进行 MAC 处理,包括 IV 和算法标识符(如果您允许使用 3DES 以外的加密算法)。您可以获得密文和明文的完整性,并且不必经过解密过程来验证明文。

于 2013-03-13T15:45:54.810 回答