Мне нужно перенести некоторый код для клиента с 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);
}
Надеюсь, кто-то может дать мне совет