1
我試圖在兩個不同的平臺上設置AES加密/解密。在加密或解密時,我一直無法讓VB.net給我預期的輸出,所以我做了一點實驗:無法在VB中正確設置AES解密.net
使用相同的System.Security.Cryptography.AesManaged對象進行加密和解密,原始數據返回,但使用不同的對象進行加密和解密,我得到不同的答案。我的代碼如下
Dim AES As New System.Security.Cryptography.AesManaged
Dim AES2 As New System.Security.Cryptography.AesManaged
Dim key() As Byte = New Byte() {&HDE, &HAD, &HBE, &HEF, &HA5, &HF4, &H56, &H12, &HDE, &HAD, &HBA, &HAB, &H1, &H92, &H83, &H74}
Dim nulliv() As Byte = New Byte() {&H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0}
AES.Key = key
AES.KeySize = 128
AES.BlockSize = 128
AES.Padding = Security.Cryptography.PaddingMode.None
AES.Mode = Security.Cryptography.CipherMode.CBC
AES.IV = nulliv
AES2.Key = key
AES2.KeySize = 128
AES2.BlockSize = 128
AES2.Padding = Security.Cryptography.PaddingMode.None
AES2.Mode = Security.Cryptography.CipherMode.CBC
AES2.IV = nulliv
Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor()
Dim input() As Byte = New Byte() {&H12, &H34, &H56, &H78, &H9A, &HBC, &HDE, &HF0, &H24, &H68, &HAC, &HE0, &H78, &H94, &H56, &H12}
Dim enc() As Byte = DESEncrypter.TransformFinalBlock(input, 0, input.Length)
Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
Dim out() As Byte = DESDecrypter.TransformFinalBlock(enc, 0, enc.Length)
Dim DESDecrypter2 As System.Security.Cryptography.ICryptoTransform = AES2.CreateDecryptor
Dim out2() As Byte = DESDecrypter2.TransformFinalBlock(enc, 0, enc.Length)
我期望輸入,輸出和輸出2匹配,但他們沒有。輸入和輸出是相同的,但out2是不同的。我只能假設AES對象中存儲了一些東西,我沒有正確設置或在對象之間正確傳輸。
我最初嘗試ECB模式來簡化事項,但想知道是不是設置IV是有效果的。所以,我嘗試用IV作爲零的CBC,這意味着它應該和ECB一樣。在這兩種情況下,我都遇到out和out2不匹配的問題。
任何人都可以向我解釋我失蹤了嗎?謝謝
PSA:請考慮使用空初始化向量,因爲這會導致安全問題。 IVs應該是隨機的,它們不應該被重用。此外,現在您的密鑰位於StackOverflow上,我建議不要使用您發佈的密鑰。最後,將填充模式設置爲「無」也是不鼓勵的。改爲使用PKCS#7。 – vcsjones
就是這樣!非常感謝。這一直讓我很不便。至於使用正確的IV和另一個關鍵是的,我完全和你在一起,這段代碼只是讓我可以開始獲得一致的答案。我現在將採取我學到的知識並正確寫出來。我不知道我會怎樣處理填充,另一部分是我嘗試從儘可能少的數據發送的嵌入式平臺。無論如何,重要的是我現在可以在兩個平臺上獲得相同的答案。再次感謝。 – AlexF