Этот код python работает отлично и расшифровывает зашифрованный текст:
import sys, hexdump, binascii
from Crypto.Cipher import AES
class AESCipher:
def __init__(self, key):
self.key = key
def decrypt(self, iv, data):
self.cipher = AES.new(self.key, AES.MODE_CBC, iv)
return self.cipher.decrypt(data)
key = binascii.unhexlify("0602000000a400005253413100040000")
iv = binascii.unhexlify("0100010067244F436E6762F25EA8D704")
hex_str_cipher = "d690a9d0a592327f99bb4c6a6b6d4cbe"
ciphertext = binascii.unhexlify(hex_str_cipher)
raw_un = AESCipher(key).decrypt(iv, ciphertext)
password = raw_un.decode('utf-16')
print(password)
, но пытается воссоздать его в VB. NET примерно так:
Sub Main()
Dim AesEnc = System.Security.Cryptography.Aes.Create()
AesEnc.Mode = CipherMode.CBC
AesEnc.KeySize = 128
AesEnc.Key = HexToBytes("0602000000a400005253413100040000")
AesEnc.IV = HexToBytes("0100010067244F436E6762F25EA8D704")
Dim EncryptedBytes As Byte() = HexToBytes("d690a9d0a592327f99bb4c6a6b6d4cbe")
Using MemStrm As New IO.MemoryStream(EncryptedBytes)
Using CryptStrm As New CryptoStream(MemStrm, AesEnc.CreateDecryptor(), CryptoStreamMode.Read)
Dim PlaintextBytes(EncryptedBytes.Length - 1) As Byte
CryptStrm.Read(PlaintextBytes, 0, PlaintextBytes.Length)
Console.WriteLine(System.Text.Encoding.Unicode.GetString(PlaintextBytes))
End Using
End Using
End Sub
Public Function HexToBytes(HexString As String) As Byte()
Dim ByteLength = HexString.Length \ 2
Dim Bytes(ByteLength - 1) As Byte
For i = 0 To ByteLength - 1
Bytes(i) = Convert.ToByte(HexString.Substring(i * 2, 2), 16)
Next
Return Bytes
End Function
Всегда терпит неудачу при вызове CryptStrm.Read
с ошибкой «Заполнение недопустимо и не может быть удалено»
Я выполнял шифрование / дешифрование AES в. NET много раз, прежде чем использовать вышеописанную процедуру, поэтому я могу Я не понимаю, почему это не так, как если бы ключ / IV был неправильным, если он идентичен тому, что использует скрипт python. Любые идеи?