security - 就安全性而言,散列和加密的顺序有什么区别吗?

标签 security encryption hash cryptography

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

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

谢谢

最佳答案

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

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

关于security - 就安全性而言,散列和加密的顺序有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15385178/

相关文章:

c# - 从 Windows 应用程序使用 amazon ses 发送电子邮件时调用 SSPI 失败

vb.net - 使用 SHA256 + SHA512 哈希作为密码?

c# - 安全地存储共享图片以在 Web 应用程序中使用

c# - C#中简单的DES ECB加解密

javascript - NodeJS md5 'bytestring' 类似于 PHP md5(str, true)

c# - 我可以将 WCF Web 服务限制为仅来自特定域的调用吗?

c# - AES输出,它比输入小吗?

java - PHP和Java之间的加密

ruby - "Array to Hash"在 Ruby 中转换

ios - 具有不同属性的两个对象的哈希值相同