2 つの異なるプラットフォーム間で AES 暗号化/復号化を設定しようとしています。暗号化または復号化するときに VB.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)
input 、 out 、および out2 が一致することを期待しますが、一致しません。input と out は同じですが、out2 は異なります。AES オブジェクトに格納されている何かが正しく設定されていないか、オブジェクト間で正しく転送されていないとしか思えません。
私は当初、物事を単純化するために ECB モードを試しましたが、IV を設定しないことが効果があるかどうか疑問に思いました。そこで、IV をゼロとして CBC を使用してみました。これは、ECB と同じであることを意味します。どちらの場合も、 out と out2 が一致しないという同じ問題が発生します。
誰かが私に何が欠けているのか説明できますか? ありがとう