我想将AES 256与c#一起使用。我在网上找到了很多像c#like this的例子。
我还发现了很多关于this或this或this等在线工具的示例。但是,当我尝试使用来自其他网站上的网站的密钥进行加密时,解密不起作用,并且加密密钥不适用于应用程序。
我需要一个示例,它如何与在线网站或更多的解释一起使用。
答案 0 :(得分:3)
当您想要加密某些内容时,可以配置各种内容。您显然需要选择加密算法(AES
)和密钥长度(256
)。
加密算法适用于二进制数据,因此您的密码必须转换为二进制数据。 http://www.codeproject.com/Articles/769741/Csharp-AES-bits-Encryption-Library-with-Salt使用Rfc2898DeriveBytes
来执行此操作。很好。我不清楚http://uttool.com/encryption/aes/default.aspx是如何做到的,http://aes.online-domain-tools.com/可能只是简单地将你的密码转换为UTF8并将其放大(用零字节填充)或削减它(但它并不是真的明确)。
然后您必须选择如何加密多个数据块(请参阅http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)。基本模式是ECB,其中每个数据块都以独立方式加密。它不是非常安全,因为两个相同的数据块将以相同的方式加密,从而产生相同的加密数据。攻击者至少会知道有一些数据会重复出现。 codeproject示例使用CBC,更加安全。 CBC基于前一个块加密块,因此即使重复相同的数据,加密的数据也会不同。 http://uttool.com/encryption/aes/default.aspx并不清楚它的作用。 http://aes.online-domain-tools.com/可让您选择算法。
这些分组密码模式中的一些需要IV(初始化向量)来预初始化分组密码模式。 codeproject示例使用Rfc2898DeriveBytes
获取的部分二进制数据,而http://aes.online-domain-tools.com/根据您的密码SHA1为您提供预定义的数据,然后您可以更改。
请注意,http://aes.online-domain-tools.com/对所有这些都有很好的解释。
从技术上讲,还有另外一件事"通常在您想要加密某些数据时设置:填充。分组密码一次只能处理一些字节数(AES为16字节)。如果您的数据较短,则必须" pad"它到16个字节。如果数据较长,则将其除以16字节的块。你仍然可以有一个小于16个字节的块(例如,如果你有17个字节,它是16 + 1个字节,所以16 +(1 + 15个填充)字节。有多种方法可以做这个填充。
重点是:除非你"对齐"所有这些小提琴,你不能从一个站点加密并从另一个站点解密。