假设我想加密一些字符串......说用户电子邮件地址。在这种情况下,例如,将电子邮件地址加密为字符串是一个好主意:
"sometext:" + email
(并且在解密时,删除额外的前缀)
而不仅仅是电子邮件地址本身?我担心的是,如果我们将加密字符串暴露在某个地方,那么某人可能能够生成足够多的加密字符串(及其纯文本版本)并能够自行设计加密的电子邮件地址。
想法?
假设我想加密一些字符串......说用户电子邮件地址。在这种情况下,例如,将电子邮件地址加密为字符串是一个好主意:
"sometext:" + email
(并且在解密时,删除额外的前缀)
而不仅仅是电子邮件地址本身?我担心的是,如果我们将加密字符串暴露在某个地方,那么某人可能能够生成足够多的加密字符串(及其纯文本版本)并能够自行设计加密的电子邮件地址。
想法?
攻击您知道全部或部分明文的加密密文称为已知明文攻击。现代密码,例如 AES,是针对此类攻击的证明。如果您愿意,您可以添加额外的盐,但如果您使用像 AES 这样的良好的现代密码,它不会真正提高安全性。
AES 或任何其他安全密码受到保护以免受纯文本攻击。但是,如果使用不当,您仍然可以从中检索数据。例如,当您使用流密码模式时,如果您不使用唯一的 NONCE,则可以检索纯文本。另一种检索信息的常用方法是简单地查看密文的大小。
如果您使用更常见的模式,例如 CBC 加密,那么您应该使用与随机数(对攻击者)无法区分的 IV。然后,您可以将该 IV 附加到密文中。如果你不这样做,那么攻击者可以简单地将密文的第一个字节与其他密文进行比较。如果这些是相同的,那么攻击者可能会看到一个通用名称。IV 可以防止这种情况。
再次阅读文本,您试图实现的是某种保护,以防止其他人向您发送密文,解密后可以将其解释为有效邮件。这可以通过使用 MAC 或 HMAC(使用另一个密钥)添加完整性保护或使用提供完整性保护的模式(如 GCM)来避免。这将保护您免受此类做法的影响,但不能防止重放攻击。您需要加密或验证某种唯一令牌(发件人 + 序列号)以实现针对该场景的保护。
不幸的是,仅添加那段静态文本对任何情况都无济于事。
这一切都取决于您将要使用的算法。如果您使用较弱的字符串,是的,无论您附加什么字符串,它仍然可以破解。
如果您使用非常强大的加密机制,这将大大增加您的安全性。