2017-01-04 4 views
0

У меня есть метод VB.Net, который делает это:Vb.Net 256 Hash на PHP 256 Hash

' Step 1: UTF8 Encodes 
Dim uEncode As New UnicodeEncoding() 

' Step 2: Creates Byte Array from UTF8 encoded string 
Dim bytClearString() As Byte = uEncode.GetBytes(ClearString) 

' Step 3: Creates the hash from the byte array 
Dim sha As New System.Security.Cryptography.SHA256Managed() 
Dim hash() As Byte = sha.ComputeHash(bytClearString) 

' Base64 Encodes the hash 
Return Convert.ToBase64String(hash) 

В PHP я делаю это:

// Step 1 utf8 encode 
$tohash = utf8_encode('testinfostring'); 

// Step 2 cast string to byte array 
Not sure about this step... 

// Step 3 
$hash = hash('sha256', $tohash, true); 

// Step 4 convert hashed array to base64 encoded string 
echo base64_encode($hash); 

Выход из моего VB. Метод Net отличается от PHP, и я думаю, что шифрование VB происходит в байтовом массиве, а PHP - в самой строке.

Любая помощь очень ценится!

+1

Пожалуйста, укажите код, а не псевдо-код, чтобы люди могли видеть, что происходит в действительности. – Theo

+0

Для начала, в VB.NET вы должны вместо этого использовать 'System.Text.Encoding.UTF8.GetBytes (ClearString)'. –

+0

Какой из них вы предпочитаете - хеширование массива исходного байта или текстового значения? – Andy

ответ

1

Решение было изменить PHP от:

$tohash = utf8_encode('testinfostring'); 

к:

$tohash = mb_convert_encoding('testinfostring', 'UTF-16LE', 'UTF-8'); 
+0

Совет. Чтобы правильно форматировать код, вставьте четыре (4) пространства перед каждой кодовой строкой. –

Смежные вопросы