c# - 如何加密一串文本,即使值相同,每次加密的字符串都不同

标签 c# .net encryption

我想安全地加密一串文本,每次加密的字符串都不同,但总是能够解密。

例如,如果我在两个不同的时间加密文本“FooBar”,我希望加密的字符串每次看起来都不同,我该怎么做?

此外,我可以使用哪种加密方式最安全?

如果可能的话,我想将 C# 与 .Net 一起使用,但我是一个完全的加密菜鸟!

谢谢

最佳答案

I want to encrypt a string of text securely and have the encrypted string different each time, but always be able to decrypt.

这是一个非常普遍的要求。

到目前为止每个答案都说使用 salt . 这是不正确的,如果您阅读有关该主题的维基百科页面的第一句话,您就会知道:

"In cryptography, a salt consists of random bits, creating one of the inputs to a one-way function."

你想要一个单向函数吗?不,你刚才说你需要能够解密字符串,所以它不能是单向函数。

你想要的是一个 initialization vector .

"In cryptography, an initialization vector is a fixed-size input to a cryptographic primitive that is typically required to be random or pseudorandom. Randomization is crucial for encryption schemes to achieve semantic security, a property whereby repeated usage of the scheme under the same key does not allow an attacker to infer relationships between segments of the encrypted message."

你明智地指出:

I am a total encryption noob!

然后不要尝试自己做;你会弄错的。很容易滥用加密来构建一个 菜鸟无法破解的系统。请记住,您的目标是建立一个系统,比您更了解加密货币的人无法破解。

此外,在互联网上随机向陌生人寻求帮助并不是了解密码学真相的好方法。大多数能回答这个问题的人,包括我自己,只是比你稍微不那么菜鸟。看看到目前为止该页面上所有糟糕的建议。例如,有两个答案建议将当前时间用作随机盐。那是彻头彻尾的疯狂; salt 的全部要点无法提前预测! 从真正的专家那里获得建议,他们知道他们在说什么。

我的建议:聘请专家来解决您的特定问题。要了解加密,请从一些介绍性文本开始,例如“应用密码学”,以便您了解加密实际解决的问题以及如何有效地使用它。加密不是你撒在数据上以确保数据安全的魔法粉尘;它只是保护数据免受攻击的整个策略的一小部分。

关于c# - 如何加密一串文本,即使值相同,每次加密的字符串都不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9063870/

相关文章:

c# - 如何在连接字符串中设置用户名和密码以连接到数据库?

c# - 在构建 .NET 应用程序之前从引用的类库执行方法以进行许可证检查

c# - 无法加载工具箱项目。它将从工具箱中删除

SQL 2008 加密扫描

c# - 什么是 Microsoft.Bcl.Async?

c# - 在互联网上的两台计算机之间建立连接

c# - 在 C# 中使用 pscp 通过 post 请求在 Windows 和 Linux 之间传输文件

c# - WPF FrameworkElement 父级和移动 UIElement

Java简单helloworld AES加密解密

Javascript 到 Ruby 加密