当您要加密某些内容时,可以配置各种东西。您显然需要选择一个加密算法(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个字节)。如果数据较短,则必须将其“填充”为16个字节。如果数据较长,则将其分成16个字节的块。您仍然可以拥有小于16个字节的块(例如,如果您有17个字节,则为16 + 1个字节,因此16 +(1 + 15个填充)字节。有多种方法可以执行此填充。
关键是:除非您“对齐”所有这些小事,否则您将无法从一个站点进行加密,而无法从另一个站点进行解密。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句