動作する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でこのようなものを実装するための提案はありますか?