• 締切済み

MD5ハッシュの方法

phpのmd5(文字列)で出力した値と同じ値をJavaのMessageDigest.getInstance("MD5")を使用して 出力したいのですが、うまくいきません。 どうすれば同じ値が出力できるようになるのでしょうか?

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

PHPを使ったことがないので確認はしていません。 PHPのmd5は文字列からMD5を計算してMD5値の32文字16進数表示文字列を返すようです。 JavaのMessageDigestはバイト列からMD5を計算してMD5を16バイトのバイナリデータとして返すと思います。 PHPのmd5相当の機能をJavaのMessageDigestで実現するには次の手順が必要です。 1. PHPがmd5で使う文字列エンコーディングに合わせて文字列をバイト列に変換する。 2. MessageDigestのdigestを使ってMD5値をバイナリで得る。 3. 結果を16進文字列に変換する。 2,3は難しくありませんが、1は難題です。 Javaで適当な文字列エンコーディングでバイト列を作ってPHPの結果と一致すればそれで合っていると思いますけど。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Java で PHP の md5_file

    PHP の md5_file に当たる処理をJavaで実現したいと考えています。 ネットで調べると PHP の md5 に当たる処理はJavaで実現できるサンプルが数多くあるのですが md5_file に当たるものが見当たりませんでした。 Javaでの実現は可能でしょうか?

    • ベストアンサー
    • Java
  • MD5について

    perlでmd5化したパスワードをpostgreSQLに格納し、認証時に使用するような処理をしています。 色々と当たってみると、md5化されたパスワードは半角英数の文字列になるようなのですが、実際にDBに登録されている文字列をteratermでselectしてみると2バイト文字(こんな感じ→`Tz祀・旅[綻)として見えます。 そんなことってあるんでしょうか? PostgreSQL7.4でDBのエンコードはSQL_ASCII。 teratermはEUCのまま使用しています。

  • md5

    md5変換された文字列を解読したいのですがどうしたらいいでしょうか? 詳しく教えてください^^

  • ハッシュ化するとDBに登録できない

    認証に使用するパスワードをmd5で暗号化してDBへ登録する処理をしています。 その際、暗号化後の文字列に”\r”という文字が入り、DBに登録できないという事象が発生しています。 そう多く発生している訳ではないようなのですが…。 そんなケースに当たった方、いらっしゃいますでしょうか? その場合、どうやってそれを回避されましたか? perlは5.8.5、PostgreSQLは7.4.13です。

    • ベストアンサー
    • Perl
  • crypt以外の暗号化の方法ってあるのでしょうか

    cryptで複数の文字列を暗号化した場合、暗号化した後の文字列が同じになる場合がありますので困っています…。 phpのmd5のような関数はないのでしょうか。

    • ベストアンサー
    • Perl
  • MD5

    MD5について調べています。異なるファイルをMD5にかけたら、それぞれ異なる値がでてくることはわかったのですが、同じファイル(データが一緒)のファイルをMD5にかけたとき、異なる値がでることはあるのでしょうか? よろしくお願いします

  • 文字を画像として出力することは可能?

    (1) java2Dを使えば、図形を画像として扱うことはできるのですが、 String str = "知" というString文字を画像として出力することはできませんか? (2) Googleで検索したところ、"ふりがなエンジン"なるサイトがあり PHPを使用して文字を画像として出力していましたが、javaのアプリケーションからPHPを使うことはできませんか?

    • ベストアンサー
    • Java
  • Md5の解読

    Md5で暗号化された文字列を復号したいのですが、どこかよい解読サイトかツールまたはプログラムはありませんでしょうか。

  • MD5ハッシュのデータが

    <? include "config.php"; $Data = '<form action=register.php method=post> Login: <br><input type=text name=login><br><br> Password:<br><input type=password name=passwd><br><br> Repeat password:<br><input type=password name=repasswd><br><br> Email:<br><input type=text name=email><br><br> <input type=submit name=submit value="Registration"> </form>'; if (isset($_POST['login'])) { $Link = MySQL_Connect($DBHost, $DBUser, $DBPassword) or die ("Can't connect to MySQL"); MySQL_Select_Db($DBName, $Link) or die ("Database ".$DBName." do not exists."); $Login = $_POST['login']; $Pass = $_POST['passwd']; $Repass = $_POST['repasswd']; $Email = $_POST['email']; $Login = StrToLower(Trim($Login)); $Pass = StrToLower(Trim($Pass)); $Repass = StrToLower(Trim($Repass)); $Email = Trim($Email); if (empty($Login) || empty($Pass) || empty($Repass) || empty($Email)) { echo "All fields is empty."; } elseif (ereg("[^0-9a-zA-Z_-]", $Login, $Txt)) { echo "Login have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Pass, $Txt)) { echo "Password have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Repass, $Txt)) { echo "Repeat password have a incorrect format."; } elseif (StrPos('\'', $Email)) { echo "Email have a incorrect format."; } else { $Result = MySQL_Query("SELECT name FROM users WHERE name='$Login'") or ("Can't execute query."); if (MySQL_Num_Rows($Result)) { echo "Account <b>".$Login."</b> is exists"; } elseif ((StrLen($Login) < 4) or (StrLen($Login) > 10)) { echo "Login must have more 4 and not more 10 symbols."; } elseif ((StrLen($Pass) < 4) or (StrLen($Pass) > 10)) { echo "Password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Repass) < 4) or (StrLen($Repass) > 10)) { echo "Repeat password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Email) < 4) or (StrLen($Email) > 25)) { echo "Email must have more 4 and not more 25 symbols."; } elseif ($Pass != $Repass){ echo "Password mismatch."; } else { $Salt = $Login.$Pass; $Salt = md5($Salt); $Salt = "0x".$Salt; MySQL_Query("call adduser('$Login', $Salt, '0', '0', '0', '0', '$Email', '0', '0', '0', '0', '0', '0', '0', '', '', $Salt)") or die ("Can't execute query."); echo "Account <b>".$Login."</b> has been registered."; } } } echo $Data; ?> 上のスクリプトで登録をしてphpmyadminで登録されたデータを見ると、 パスワードが空になっていたり文字が化けた1文字とかになって書き込まれています。 PHP上で何か問題があるのかと <?php $str = 'test'; if (md5($str) === '098f6bcd4621d373cade4e832627b4f6'){ eco "MD5OK"; exit; } ?> のように書いてみると正常にMD5OKと出ますのでデータベース側に問題があるような気がします。 どうしたら正常に書き込まれるようになるか分かる方いらっしゃいませんでしょうか?

    • ベストアンサー
    • MySQL
  • Stringクラスの変数の格納アドレスを知りたい

    いつもお世話になります。 Javaの文字列クラスのStringは参照型ですが、この変数の値が格納されたアドレスを知るためにはどうすればよいのでしょうか。eclipse上で、文字列の変数に対してtoString()を試してみたところ、格納されている文字列が出力されました。 ※自作したクラス、たとえばtest.MyClassだとすれば、toString()を用いれば「test.MyClass@01234」というような表記で出力されますが、このような情報を取得するにはどうすればよいでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • 戸建て住宅外部倉庫の暖気・湿気について
  • 築3年目になる家の外部倉庫が暖気や湿気でかび臭くなってしまいました。外部倉庫に換気扇やガラリはついてませんので当然な結果かも知れませんが、ガラリをつけると改善されますか?倉庫の壁は断熱材や防水紙で処理されているでしょうから倉庫の扉に後付けガラリを付けたらよくなるのかなとの素人感覚です。
  • 因みに外部倉庫の扉は以下のものです。メーカーからは後付けガラリは対応していなさそうですが、扉に開口部を作って市販の換気ガラリをつけることはできるのでないでしょうか。
回答を見る