Портирование vb. net шифрования Rijndael на PHP OpenSSL - PullRequest
0 голосов
/ 03 апреля 2020

Мне нужно перенести некоторый код для клиента с vb. net на PHP. Сейчас vb. net на самом деле не является языком, который я использую, поэтому у меня есть некоторые проблемы, портируя часть шифрования на PHP. Вот vb. net source

Function EncryptString(ByVal Value As String, ByVal _password As String) As String

    Dim AES As New RijndaelManaged

    Dim md5 As New MD5CryptoServiceProvider
    Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(_password))

    md5.Clear()
    AES.Key = key
    AES.GenerateIV()

    Dim iv() As Byte = AES.IV
    Dim ms As New MemoryStream

    ms.Write(iv, 0, iv.Length)

    Dim cs As New CryptoStream(ms, AES.CreateEncryptor, CryptoStreamMode.Write)
    Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(Value)

    cs.Write(data, 0, data.Length)
    cs.FlushFinalBlock()

    Dim encdata() As Byte = ms.ToArray()
    Return (Convert.ToBase64String(encdata))
    cs.Close()
    AES.Clear()

End Function

С PHP есть (был) модуль mcrypt, который сейчас устарел. Поэтому, когда я читаю, мы должны использовать openssl_encrypt с этого момента. Проблема, которая у меня есть, состоит в том, что я не полностью понимаю код vb. net. Вот что у меня пока есть, но оно не шифрует его правильно (у меня есть инструмент расшифровки для тестирования, который также работает в vb. net).

function encrypt($string, $key, $iv = null) {
    $key = md5($key);
    $iv_size = openssl_cipher_iv_length('AES-128-CBC');
    if (!$iv) {
        $iv = openssl_random_pseudo_bytes($iv_size);
    }
    $encryptedMessage = openssl_encrypt($string, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encryptedMessage);
}

Надеюсь, кто-то может дать мне совет

...