C#中的AES算法-现在完全混淆了

本文关键字:中的 AES 算法 | 更新日期: 2023-09-27 18:23:48

我最初搜索了(Google、SO、Bing)一个工作代码,该代码显示如何使用.NET中可用的AES算法使用c#加密和解密密码。我的疑虑来自的这两个帖子

  1. http://yossi-yakubov.blogspot.in/2010/07/aes-encryption-using-c-short-way.html

  2. http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

#1中,他显示了使用CryptoTransform可以完成所有操作,但MSDN页面示例显示了使用复杂流。

  • 我需要那样做吗?

  • 我有什么好处?

  • 有人能澄清一下我需要遵循的最佳代码以及其他方法中的任何注意事项吗。

更令人困惑的是,这篇文章谈到了加密中的salt,现在我完全迷失了方向。为什么salt应该出现在加密中而不是HASHING中。

C#中的AES算法-现在完全混淆了

这两种方法都有效,但我想说的是,第一个链接中使用的方法最适合"少量"数据,其中数据可以合理地适应输入byte[](例如密钥、密码等)。

来自第二个链接的方法更适合"大量"数据,在这种情况下,将整个输入加载到内存中可能是不可行的,而流式传输方法更适合(例如,加密网络流上的文件或数据)。

考虑到您的需要,第一个链接中的方法可能是合适的。

至于最后一个链接中提到的salt,这只是用于种子PasswordDeriveBytes,与AES算法本身没有直接关系。

然而,值得一提的是,AES也有一种IV(初始化向量)形式的"盐"。这只是随机数据(每次都应该不同),可以与密文一起存储,并确保即使多次加密同一数据,输出也不同。

考虑到这一点,不应使用最终链接中显示的方法,因为它似乎每次都会产生相同的输出,因为密钥和IV都是完全根据输入的密码生成的,而IV应该是随机字节。