У меня есть шестнадцатеричная строка из 116 символов, которую нужно зашифровать AES, а затем преобразовать в Base64. Я нашел следующий код шифрования AES здесь, в StackOverflow, и из тестирования он работает так, как должен, по крайней мере, я получаю тот же результат, что и поставщик. Проблема, с которой я столкнулся, в соответствии с инструкциями поставщика, заключается в том, что «результирующая строка должна иметь длину 88 символов и заканчиваться двумя символами заполнения». Я заканчиваю с 172 символьной строкой Base64, и я понятия не имею, где проблема. Любая помощь будет принята с благодарностью
Function EncryptFromStringToBytes(ByVal plainText As String) As Byte()
Dim encrypted As Byte()
'Create AES object
Using AES As RijndaelManaged = New RijndaelManaged()
AES.Padding = PaddingMode.PKCS7
AES.KeySize = 256
AES.Mode = CipherMode.CBC
AES.Key = StringToByteArray(strSharedKey)
AES.IV = StringToByteArray(strIV)
'create an encryptor to perform stream transform
Dim encryptor As ICryptoTransform = AES.CreateEncryptor(AES.Key, AES.IV)
'create the streams used for encryption
Using msEncrypt As MemoryStream = New MemoryStream()
Using csEncrypt As CryptoStream = New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
'write all data to the stream. Streamwriter will use the default UTF8 encoding if not specified.
Using swEncrypt As StreamWriter = New StreamWriter(csEncrypt) ', System.Text.Encoding.ASCII)
swEncrypt.Write(plainText)
End Using
encrypted = msEncrypt.ToArray()
End Using
End Using
End Using
'return encrypted bytes from the memory stream and convert to Base64
Return Convert.ToBase64String(encrypted)
'TextBox3.Text = Len(encrypted)
'Return encrypted
End Function
@ Люк Джошуа Парк: IV, SharedKey и SharedSecret даны мне в нотации Hx. Инструкции производителей: 1. Преобразовать UT C Дата / Время из UTF8 в нотацию Hx (длина результирующей строки составляет 50 Hx символов.) - это правильно 2. Конкатенация step1 + "7 c" + SharedSecret (результирующая строка длиной 116 хх символов) - это правильно 3. Шифрование AES step2 - я думаю вот в чем проблема, но я получаю то же значение теста, полученное поставщиком 4. Преобразование шага 3 в Base64
Это функция StringToByteArray ():
Function StringToByteArray(text As String) As Byte()
Dim bytes As Byte() = New Byte(text.Length \ 2 - 1) {}
For i As Integer = 0 To text.Length - 1 Step 2
bytes(i \ 2) = Convert.ToByte(text.Substring(i, 2), 16)
Next
Return bytes
End Function
Как примечание, как я могу просмотреть зашифрованную строку в текстовом поле? Если я использую EncryptFromStringToBytes (CVr2.Text) .ToString, он возвращает system.byte [] вместо фактического значения.