Я ищу, чтобы преобразовать эту функцию из PHP в VB. Может ли кто-нибудь помочь мне понять, почему вывод не является правильным?
//get img
$img = file_get_contents('https://www.random.org/analysis/randbitmap-rdo-section.png');
//pad
$blocksize = 16;
$pad = $blocksize - (strlen($img) % $blocksize);
$paddedimg = $img . str_repeat(chr($pad), $pad);
//encrypt
$data = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, 'abcdefghijklmnop', $paddedimg, MCRYPT_MODE_ECB);
//output
echo base64_encode($data);
Вышеуказанные выводы;
wYkugZmmsCHNwFOr7sAgk6yUU2I+2rOtBmXAIcPleue+dT4zIvkSA6UYmW6tickeoIbyCylxrb5n
…
[остальное урезано, но продолжается, и всего 29484 символа]
Вот что я имею в VB;
Public Sub GetBase64EncryptedImg()
Dim Img As Byte() = Nothing
Using wc As New WebClient
Img = wc.DownloadData("https://www.random.org/analysis/randbitmap-rdo-section.png")
End Using
MsgBox(EncryptECB(Img))
End Sub
Public Function EncryptECB(Data As Byte()) As String
Dim Key As Byte() = Encoding.UTF8.GetBytes("abcdefghijklmnop")
Dim Encrypted As Byte() = Nothing
Using rj As New RijndaelManaged()
Try
rj.Padding = PaddingMode.PKCS7
rj.Mode = CipherMode.ECB
rj.KeySize = 128
rj.BlockSize = 128
rj.Key = Key
Dim ms As New MemoryStream()
Using cs As New CryptoStream(ms, rj.CreateEncryptor(rj.Key, rj.IV), CryptoStreamMode.Write)
Using sr As New StreamWriter(cs)
sr.Write(Data)
End Using
Encrypted = ms.ToArray()
End Using
Finally
rj.Clear()
End Try
End Using
Return Convert.ToBase64String(Encrypted)
End Function
Выходы VB;
pVngUaXYYv1tJSPzjDuwKw==
Вот и все, нигде не близко к нужному количеству символов. Куда я здесь не так?
РЕДАКТИРОВАТЬ: Если пометить как дубликат, этот вопрос / ответ возвращает строку в кодировке base64. mcrypt_encrypt нет, поэтому я не уверен, как применить код в этом ответе.
EDIT2: этот дубликат дает значение IV, а код выше — нет. Разве это не дифференцирует два, чтобы заслужить уникальный ответ? Или это так же просто, как удаление строки, устанавливающей свойство IV RijndaelManaged
объект?
EDIT3: полностью переработан вопрос
Задача ещё не решена.
Других решений пока нет …