如果我的任何假设不正确,请纠正我。
当您使用 sha1 进行哈希处理时,您无法反转哈希数据以获取原始字符串。
因此,如果我有一封稍后需要使用的电子邮件存储在数据库中,我就无法对其使用 sha1。
但是,我仍然想在发生违规时提供保护,那么我该怎么办?
我正在使用 django,它在 settings.py 中存储一个 Secret_key。
我尝试使用 AES 加密,但注意到随着编码的字符串较长,返回的加密字符串也较长,这是有道理的。然而,加密字符串比原始字符串长得多。是否有一种加密类型,返回的字符串与原始字符串的大小相同?因为我使用的是 django 用户模型,并且电子邮件限制为 75,因此如果用户使用 32-75 个字符的电子邮件,则加密字符串的长度为 128,即 > 75,因此无法存储在列中。
最佳答案
三个key concepts of information security是保密性、完整性和可用性。就您而言,像 SHA1 这样的加密哈希可以提供完整性:您可以随时检查哈希值以查看电子邮件是否已被篡改。就您而言,您需要 secret 性,而哈希函数无法提供 secret 性:您希望数据库中的电子邮件不可读,以防数据库受到损害。虽然对称加密算法是答案的一部分,但更大的问题是 key 管理。一旦您有了加密和解密电子邮件的 key ,您将如何存储它?有多少人可以使用 key ?它会与数据库保存在同一台计算机上吗? (这很危险。)它会保留在同一个网络上吗?您多久更换一次 key ?如果你丢了 key 怎么办?很可能,您的基础设施与加密电子邮件一样容易遭受未加密电子邮件的数据泄露。安全性很困难,最好将精力集中在审核数据库设置上——这是很多人已经做过的事情,拥有众所周知且经过生产测试的解决方案——而不是创建复杂的加密系统。
关于html - 如何保护不想散列的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803002/