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