我一直在尋找很多不同的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