vb.net — шифрование TripleDES в PHP не получает того же значения, что и в VB

Я нашел много решений, которые объясняют, как смотреть на C # по сравнению с PHP, но нет конкретных для VB. Я нашел один полезный совет о заполнении PHP нулями, но это не решило проблему, так как я совпал с этим в VB, и это не помогло. В любом случае, я знаком с VB, и у нас есть другой разработчик, знакомый с PHP, и мы пытаемся сделать так, чтобы наши функции соответствовали друг другу, чтобы шифрование tripleDES выдавало одинаковое значение в обоих. Мы интегрируемся со сторонним приложением, и я знаю, что код VB выдает правильное значение, а PHP — нет. У меня есть и код на VB, и на PHP, перечисленные ниже. Может ли кто-нибудь из них быть достаточно знаком с обоими, чтобы иметь представление о том, почему код PHP не возвращает правильное значение? Я знаю, что значение, возвращаемое из PHP, имеет правильную длину, но что-то отключено и не соответствует. Пожалуйста помоги.

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dataToHash As String
Dim encryptedText As String = ""
dataToHash = "hereismystring"Dim buffer As Byte() = Encryption(dataToHash, "abcd1234")
encryptedText = Convert.ToBase64String(buffer)

lblToken.Text = encryptedText.ToString()
End Sub

Public Shared Function Encryption(ByVal PlainText As String, ByVal key As String) As Byte()
Dim des As TripleDES = CreateDES(key)
Dim ct As ICryptoTransform = des.CreateEncryptor()
Dim input As Byte() = Encoding.Unicode.GetBytes(PlainText)
Return ct.TransformFinalBlock(input, 0, input.Length)
End Function

Private Shared Function CreateDES(ByVal key As String) As TripleDES
Dim md5 As MD5 = New MD5CryptoServiceProvider()
Dim des As TripleDES = New TripleDESCryptoServiceProvider()
des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes(key))
des.IV = New Byte(des.BlockSize / 8 - 1) {}
des.Padding = PaddingMode.Zeros
Return des
End Function

PHP:

$start = "hereismystring";

$cipher = MCRYPT_TRIPLEDES;
$mode = MCRYPT_MODE_CBC;

$rawKey = "abcd1234";
$ssoKey = md5($key_encoded,true);

$key_size = strlen($ssoKey);
$iv_size = mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CBC);
$ssoIV = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$user_str = mb_convert_encoding($start,"UTF-16LE");

$key_blocksize = mcrypt_get_block_size($cipher,$mode);
$key_padding_size = $key_blocksize - (strlen($user_str) % $key_blocksize);

$user_str .= str_repeat(chr($key_padding_size), $key_padding_size);
$key_iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$mode),"");
$key_triple = substr($key_encoded,0,mcrypt_get_key_size($cipher,$mode));

$key_encoded_text = mcrypt_encrypt($cipher,$key_triple,$user_str,$mode,$key_iv);

$final = base64_encode($key2_encoded_text);

echo "<p>" . $final </p>";
?>

Спасибо,
Джо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]