PHPとJavaでmd5の値を同じにする方法

エキサイトのエンジニア岩藤です。

PHPJavamd5の値を同じにする方法を紹介します。

sample.php

<?php
$md5 = md5("エキサイト");
echo $md5 . "\n";
PHP sample.php
2d56c309fdea63868f7397ebceba1867

Sample.java(サンプルはSpring Shellです)

@ShellMethod(value = "文字をmd5で暗号化する md5 text", key = "md5" , group = "md5")
public String md5(String text) {
    return DigestUtils.md5Hex(text);
}
shell:>md5 エキサイト
2d56c309fdea63868f7397ebceba1867

ちなみに方法論として上記にいきつく前に、最初は下記の方法でJava側は変換してたんですが、うまくいかず。 色々頑張ってしまったんですが、普通にシンプルにできたんですね、という事で今回メモとして残します。

最初うまくいかなかった書き方

try {
    String key = this.articleCode + "-" + this.articleId;
    byte[] md5Bytes = MessageDigest.getInstance("MD5").digest(key.getBytes(StandardCharsets.UTF_8)); 
    return new BigInteger(1, md5Bytes).toString(16);
} catch (NoSuchAlgorithmException e) {
    throw new RuntimeException("get token error");
}

上記だと先頭0の場合に、Java側で先頭0が削られてしまい一致せずではまりました。

PHP側 032e3f03122aa5162dd4a5351539b3ea
Java側 32e3f03122aa5162dd4a5351539b3ea