VB代碼的作品:我有JAVA和VB的代碼工作。我需要做同樣的事情,使用PHP,我該怎麼辦呢
Public Function Encrypt(ByVal Data As String) As Byte()
Dim md5Hasher As New MD5CryptoServiceProvider()
Dim hashedBytes As Byte()
Dim encoder As New UTF8Encoding()
hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(Data))
Return hashedBytes
End Function
Java代碼的工作原理:
byte[] bytes = stringToConvert.getBytes("UTF-8");
MessageDigest m = MessageDigest.getInstance("MD5");
hashedBytes = m.digest(bytes);
我在PHP已經試過了沒有工作,我想我知道爲什麼。
我認爲這是因爲這樣的:
字符在Java中被存儲爲Unicode的16位序列。在PHP中,它們是單字節序列。 這是我試過的代碼...
$UTFbString = UTF8_encode($bString);
$hashedBytes = md5($UTFbString, true);
好吧,我發現,如果我用這個方法...
function ascii_to_dec($str)
{
for ($i = 0, $j = strlen($str); $i < $j; $i++) {
$dec_array[] = ord($str{$i});
}
return $dec_array;
}
和驗證碼...
$bStringArr = array(ascii_to_dec($bString));
I can get back an array that matches the byte array in JAVA.
So the next challenge is to convert that to bytes then md5 hash those bytes?
看起來像這樣的JAVA代碼...
MessageDigest digester = MessageDigest.getInstance("MD5");
byte[] bytes = new byte[8192];
int byteCount;
while ((byteCount = in.read(bytes)) > 0) {
digester.update(bytes, 0, byteCount);
}
byte[] digest = digester.digest();
在PHP中實現類似這樣的東西的任何建議?
所有輸出來自VB.Code的輸出,JAVA代碼和PHP代碼必須匹配。這並沒有產生預期的結果。 – user1775543
這取決於你如何做匹配。我試着將它匹配爲-127到127之間的數字。如果你想讓輸出正確匹配,使用標準的md5輸出模式。一個由32個字符組成的字符串[0-f]。在PHP中,它只是 $ stringToConvert =「äöüß」; $ md5 = md5(utf8_encode($ stringToConvert)); 或沒有utf8_encode(),這取決於你如何閱讀PHP中的字符串。 – AmShaegar