1

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 が一致しないという同じ問題が発生します。

誰かが私に何が欠けているのか説明できますか? ありがとう

4

1 に答える 1

1

KeySizeプロパティを 128に割り当てないでください。割り当てると、AesManaged以前に指定したキーが無効になります。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.Padding = Security.Cryptography.PaddingMode.None
AES.Mode = Security.Cryptography.CipherMode.CBC
AES.IV = nulliv

AES2.Key = key
AES2.Padding = Security.Cryptography.PaddingMode.None
AES2.Mode = Security.Cryptography.CipherMode.CBC
AES2.IV = nulliv
'Rest of the code is the same.
于 2013-05-16T14:11:50.097 に答える