我最初搜索(Google,SO,Bing)一个工作代码,显示如何使用c#中使用.NET提供的AES算法加密和解密密码。我怀疑这两个帖子
http://yossi-yakubov.blogspot.in/2010/07/aes-encryption-using-c-short-way.html
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx
在#1 中,他表示可以使用CryptoTransform
完成所有操作,但MSDN
页面示例显示了使用复杂流。
我需要这样做吗?
我有什么好处?
有人可以澄清哪些是我需要遵循的最佳代码以及其他方法中的任何警告。
加入混乱 this 关于加密盐的谈话,现在我完全迷失了。为什么盐应该加密而不是哈希
答案 0 :(得分:3)
这两种方法都有效,但我会说第一个链接中使用的方法最适合“小”数据量,其中数据可以合理地适合输入byte[]
(例如密钥,密码)等)。
来自第二个链接的方法更适合“大量”数据,其中将整个输入加载到内存中可能是不可行的,并且流式方法更合适(例如,加密网络流上的文件或数据)
根据您的需要,第一个链接的方法可能是合适的。
至于最终链接中提到的salt,它仅用于种子PasswordDeriveBytes
,并且与AES算法本身没有直接关系。
值得一提的是,AES以及IV(初始化矢量)的形式存在各种“盐”。这只是随机数据(每次都应该是不同的),可以与密文一起存储,并确保即使多次加密相同的数据,输出也是不同的。
考虑到这一点,最终链接中显示的方法应该不,因为它似乎每次都产生相同的输出,因为密钥和IV都是完全由输入密码,而IV应该是随机字节。