我真的不知道如何解釋這個,所以我會添加我的代碼並嘗試從那裏通過它。正如你所看到的,這很難遵循通用的編程標準。我試圖從密鑰和iv代中刪除所有「隨機性」,所以我提供了自己的字符串並將其適當添加到AES值中。AES加密和解密
一旦我將該值加密,我將它轉換爲一個字符串並將其作爲密碼參數存儲在數據庫中。我的問題是能夠將其解密回原來的密碼值,這對於某些Web請求稍後需要。我試圖將字符串值轉換回字節數組,但我得到一個「無效的塊大小」錯誤,然後是「錯誤的PKCS7填充。無效的長度250」。不知道這意味着什麼。
任何想法?
static public void Main()
{
string original ="{password for testing purposes}";
string originalkey = "{128 key}";
string originaliv = "{16 iv}";
byte[] enckey = Encoding.UTF8.GetBytes(originalkey);
byte[] enciv = Encoding.UTF8.GetBytes(originaliv);
using (AesManaged myAes = new AesManaged())
{
myAes.Key = enckey;
myAes.IV = enciv;
byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);
string result = Encoding.UTF8.GetString(encrypted);
string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV);
Console.WriteLine("Encrypted: {0}", result);
Console.WriteLine("Round Trip: {0}", roundtrip);
byte[] decrypted = Encoding.UTF8.GetBytes(result);
roundtrip = DecryptStringFromBytes_Aes(decrypted, myAes.Key, myAes.IV);
Console.WriteLine("Encrypted: {0}", roundtrip);
Console.WriteLine("Round Trip: {0}", result);
}
}
只要你的編碼byte []數組BLOB成一個字符串可能會給你幾個問題 - 它可能包含零字節,可能會導致字符未由數據庫正確處理(取決於數據庫配置)。嘗試堅持使用文本編碼不會干擾字符串的編碼(例如具有字節十六進制值的字符串或Base64編碼) – elgonzo