Я пишу код в VB.Net для AES, зашифровываю строку из шестнадцатеричных байтов длиной 16 и ожидаю такой же длины результата.
Я нашел код C # с веб-сайта Microsoft (https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netframework-4.8) и использовал https://codeconverter.icsharpcode.net/, чтобы преобразовать его в VB.Net, ofcourse сделал несколько изменений, чтобы заставить его работать в VB.Net
Ниже приведен модифицированный код для вызова, а также шифрования и дешифрования. Я пропускаю что-то, что приводит к 16 (что отправлено) зашифрованному значению +48 байт. Мне нужно 16-байтовое шестнадцатеричное значение, зашифрованное с использованием AES, режим ECB
Ниже указан телефонный код
Private Sub ProcessData()
Dim original As String = sKi
Dim encryptedKi() As Byte
Dim KeyBytes() As Byte = {"&h" & Mid(sK4, 1, 2), "&h" & Mid(sK4, 3, 2), "&h" & Mid(sK4, 5, 2), "&h" & Mid(sK4, 7, 2), "&h" & Mid(sK4, 9, 2), "&h" & Mid(sK4, 11, 2), "&h" & Mid(sK4, 13, 2), "&h" & Mid(sK4, 15, 2), "&h" & Mid(sK4, 1, 2), "&h" & Mid(sK4, 3, 2), "&h" & Mid(sK4, 5, 2), "&h" & Mid(sK4, 7, 2), "&h" & Mid(sK4, 9, 2), "&h" & Mid(sK4, 11, 2), "&h" & Mid(sK4, 13, 2), "&h" & Mid(sK4, 15, 2)}
j = 0
Using myAes As Aes = Aes.Create()
myAes.Key = KeyBytes
encryptedKi = clsCryptoDES.EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV)
For x = 0 To encryptedKi.Length - 1
sKi = sKi & Mid("0" & Hex(encryptedKi(x)), Len(Hex(encryptedKi(x))), 2)
Next x
End Using
End Sub
'Ниже приведены коды для шифрования и дешифрования
Public Shared Function EncryptStringToBytes_Aes(ByVal plainText As String, ByVal Key As Byte(), ByVal IV As Byte()) As Byte()
If plainText Is Nothing OrElse plainText.Length <= 0 Then Throw New ArgumentNullException("plainText")
If Key Is Nothing OrElse Key.Length <= 0 Then Throw New ArgumentNullException("Key")
If IV Is Nothing OrElse IV.Length <= 0 Then Throw New ArgumentNullException("IV")
Dim encrypted As Byte()
Using aesAlg As Aes = Aes.Create()
aesAlg.Key = Key
aesAlg.IV = IV
aesAlg.KeySize = 128
aesAlg.Mode = CipherMode.ECB
Dim encryptor As ICryptoTransform = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV)
Using msEncrypt As MemoryStream = New MemoryStream()
Using csEncrypt As CryptoStream = New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
Using swEncrypt As StreamWriter = New StreamWriter(csEncrypt)
swEncrypt.Write(plainText)
End Using
encrypted = msEncrypt.ToArray()
End Using
End Using
End Using
Return encrypted
End Function
Public Shared Function DecryptStringFromBytes_Aes(ByVal cipherText As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As String
If cipherText Is Nothing OrElse cipherText.Length <= 0 Then Throw New ArgumentNullException("cipherText")
If Key Is Nothing OrElse Key.Length <= 0 Then Throw New ArgumentNullException("Key")
If IV Is Nothing OrElse IV.Length <= 0 Then Throw New ArgumentNullException("IV")
Dim plaintext As String = Nothing
Using aesAlg As Aes = Aes.Create()
aesAlg.Key = Key
aesAlg.IV = IV
Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)
Using msDecrypt As MemoryStream = New MemoryStream(cipherText)
Using csDecrypt As CryptoStream = New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
Using srDecrypt As StreamReader = New StreamReader(csDecrypt)
plaintext = srDecrypt.ReadToEnd()
End Using
End Using
End Using
End Using
Return plaintext
End Function
Ожидаемый результат
878CB02AA535DB9BEA77FA9107F4A29B
http://extranet.cryptomathic.com/aescalc/index?key=0123456789ABCDEF0123456789ABCDEF&iv=00000000000000000000000000000000&input=6E67229083422AD33A096657F0D01761&mode=ecb&action=Encrypt&output=
Фактический результат (16-байтовая простая строка + 48-байтовый зашифрованный результат)
6E67229083422AD33A096657F0D01761E03A1ED32270B4E934017D8429871CC7F78392C21477DD25BF1C633E146071063D844DC896DD1B285351FC8BE5C7CB42