我正在用
java实现密码保险库程序.我编写了一个用于加密的三重DES和一个用于散列的SHA256.
我的问题是,如果我首先散列原始数据(密码)然后加密它,或者首先加密数据(密码)然后散列加密数据,它会有什么不同.我最担心的是,它会在安全方面做出任何重大改变吗?
谢谢
最佳答案 根据您的评论,您不希望仅使用哈希作为消息身份验证代码.有适用于此应用程序的基于散列的MAC(适当地称为
HMAC).在这种情况下,您可能想要使用HMAC-SHA256.另外请记住,您需要一个单独的MAC密钥(使用相同的密钥进行加密,MAC是一个很大的禁忌).
但就你的问题而言,你的问题归结为加密 – 然后MAC与MAC然后加密.根据这个Crypto.SE answer,最好的行动方案是Encrypt-then-MAC,只要你确保你关于密文的MAC,包括IV和算法标识符,如果你允许除了3DES之外的ecryption算法.您将获得密文和明文完整性,并且不必经过解密过程来验证明文.