1

有效的VB代码:

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 中实现类似的东西有什么建议吗?

4

2 回答 2

1

尝试:

<?php
$hashedBytes = base64_encode(md5($bString, true))
于 2012-11-14T22:12:01.050 回答
1

虽然我不确定为什么要使用字节数组作为 md5 哈希,但这是我的解决方案:

<?php
    $stringToConvert = "äöüß";
    $md5 = md5(utf8_encode($stringToConvert), true);
    for($i = 0; $i < strlen($md5); $i++) {
        $c = ord($md5[$i]);
        $b[] = $c > 127 ? $c-256 : $c;
    }
    print_r($b);
?>
于 2012-11-14T22:59:36.713 回答