我一直在寻找很多不同的C#加密示例。在大多数例子中,加密密钥以及初始化向量(IV)作为字节数组传递到加密/解密方法中。将加密密钥和IV存储/转换为字符串
我想将Key和IV存储为字符串。键入硬件安全模块并将IV作为SQL Server数据库中的nvarchar。
我不断遇到关于如何正确地将Key和IV转换为字符串的propblems。一些示例说使用Base64编码,而其他示例使用Encoding.UTF8
。
这里是产生IV并将它转换为一个Base64串的示例...
using (var aesProvider = new AesCryptoServiceProvider())
{
aesProvider.GenerateIV();
var ivBase64 = Convert.ToBase64String(aesProvider.IV);
return ivBase64;
}
然而,当我通过IV的这个字符串表示到加密方法,然后将其转换回一个字节数组下面的代码失败说IV不是正确的大小。
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initializationVector);`
// intermediate code excluded for brevity
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
在字节数组和字符串表示之间来回转换加密密钥和IV是否存在标准方式?
[这是加密的最佳答案(http://stackoverflow.com/a/10366194/542251)我发现。我基本上只是现在使用这个代码。它接受一个字符串BTW – Liam
@Liam - 感谢这个伟大的例子!你使用哪一个代码示例?列出了一堆。 – webworm
这取决于!我最近使用SimpleDecryptWithPassword,我并不关心安全性,我主要想混淆一些数据。你使用的方法将取决于你想要数据的安全程度 – Liam