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の文字は、Unicode16ビットシーケンスとして格納されます。PHPでは、これらは1バイトのシーケンスです。これは私が試したコードです...

     $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 に答える