假设我要加密某些字符串...说出用户电子邮件地址。例如,在这种情况下,最好将电子邮件地址加密为字符串:
"sometext:" + email
(当解密时,删除额外的前缀)
而不只是电子邮件地址本身?我担心的是,如果我们在某处公开加密字符串,有人可能能够生成足够的加密字符串(及其纯文本版本),并能够自己设计加密的电子邮件地址。
思想?
答案 0 :(得分:1)
这种技术已被称为salting,非常常见。
如果您保密盐,请将其与输入混合,然后将其输入加密哈希函数,应该是安全的。不过,你应该确定你在做什么,特别是在加密时!使用sha1进行盐析的示例:
saltedHash = sha1(salt + input)
您现在可以存储生成的哈希。如果您需要将给定输入与存储的输入进行比较,则执行相同的步骤并比较盐渍哈希值。
Sitenote:如果你将它用于MAC
,你不应该在没有阅读秘密前缀/后缀哈希和练习加密的情况下继续进一步。
答案 1 :(得分:1)
攻击您知道全部或部分明文的加密密文称为known plaintext attack。现代的密码,如AES,可以抵御这种攻击。如果你愿意,你可以添加额外的盐,但是如果你使用像AES这样的现代密码,它不会真正提高安全性。
答案 2 :(得分:1)
AES或任何其他安全密码可以防止纯文本攻击。但是,如果使用不正确,您仍然可以从中检索数据。例如。当您使用流密码模式时,如果您不使用唯一的NONCE,则可以检索纯文本。另一种检索信息的常用方法是查看密文的大小。
如果您使用更常见的模式(如CBC加密),则应使用与随机数无法区分的IV(对攻击者)。然后,您可以将该IV添加到密文中。如果不这样做,那么攻击者可以简单地将密文的第一个字节与其他密文进行比较。如果这些是相同的,那么攻击者可能会看到一个共同的名称。 IV防止这种情况发生。
再次阅读文本,您要实现的目标是防止其他人向您发送密文,这可能在解密后被解释为有效邮件。这可以通过使用MAC或HMAC(使用其他密钥)添加完整性保护或使用提供完整性保护的模式(如GCM)来避免。这可以保护您免受此类行为的影响,但不会对抗重播攻击。您需要加密或验证某种唯一令牌(发件人+序列号)以实现对该场景的保护。
不幸的是,只添加那段静态文本无助于任何场景。
答案 3 :(得分:0)
这完全取决于您将要使用的算法。如果你使用弱的,那么无论你追加什么字符串,它仍然是可以破解的。
如果您使用非常强大的加密机制,这将为您的安全性增加很多。