1
我試圖用這個功能來解密,但我不確定是什麼原因導致它失敗AesCryptoServiceProvider解密
public string Decrypt(byte[] cipherText, byte[] IV, byte[] key)
{
using (AesCryptoServiceProvider AESDecrypt = new AesCryptoServiceProvider())
{
//here we set the key and IV instead having the class generate them.
AESDecrypt.IV = IV;
AESDecrypt.Key = key;
ICryptoTransform decryptor = AESDecrypt.CreateDecryptor(AESDecrypt.Key,
AESDecrypt.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt,
decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
csDecrypt.Flush();
plainText = srDecrypt.ReadToEnd();
return plainText;
}
}
}
}
}
明文返回一個空字符串。密鑰和IV是在前一個函數中生成的系統,並且正在正確傳遞。
當你打開你的'StreamReader'時,msDecrypt/cipherText是你期望它們的長度嗎?我只用流而不是'byte []'來做這件事 - 但是你是否嘗試過檢查msDecrypt流的位置(當你打開流讀取器?)。它需要在位置0. – ne1410s 2014-12-13 14:47:40
您是否正在使用加密方法沖洗?檢查方法開始處的密文長度,如果爲零則拋出異常。使用上一個線程中的加密代碼,如果您沒有正確實施Flush(),則可能會有長度爲零的字節數組。 – 2014-12-13 14:57:56
請刪除沖洗,看看它是否工作。如果您只有16個字節的密文,則可能是明文本身由0個字節組成(或者,如果您只是將其打印出來,則使用不可打印的字符)。在這種情況下,你只需要一個16個填充字節的塊。 – 2014-12-13 15:16:02