MD5ハッシュを生成するにはどうすればよいですか?


1007

Javaで文字列のMD5ハッシュを生成する方法はありますか?



40
MD5は一方向のセキュリティ機能として安全ではない可能性がありますが、それでも汎用のチェックサムアプリケーションには適しています。
rustyx 2015

あなたはphpで試すことができ、非常に簡単に解決されます。
Anupam Haldkar

回答:


602

あなたが必要java.security.MessageDigestです。

を呼び出しMessageDigest.getInstance("MD5")て、MessageDigest使用できるMD5インスタンスを取得します。

次のいずれかを実行してハッシュを計算します。

  • 入力全体をaとしてフィードしbyte[]、を使用して1つの操作でハッシュを計算しmd.digest(bytes)ます。
  • を呼び出して、一度にMessageDigest1つのbyte[]チャンクにフィードしmd.update(bytes)ます。入力バイトの追加が完了したら、を使用してハッシュを計算し md.digest()ます。

byte[]返されたmd.digest()MD5ハッシュです。


144
ここで言及されていないことの1つは、私を驚かせました。MessageDigestクラスはスレッドセーフではありません。異なるスレッドで使用される場合は、再利用するのではなく、新しいスレッドを作成してください。
mjuarez 2013年

39
複数のメソッドを使用して、内部状態を変更します。スレッドセーフの欠如は、どうして驚くべきことでしょうか。
Bombe 2013

90
@Bombe:なぜ我々はことを期待すべきである必要がありするMessageDigestの内部状態を知って?
Dan Barowy、2014

28
@DanBarowyよく、あなたそれ変異させています(つまり、値を返さないが他のメソッドが異なる値を返す原因となるメソッドを呼び出す)。
ボンベ2014

3
@TraubenfuchsをMessageDigest使用すると、データをチャンクで入力できます。これは静的メソッドでは不可能です。一度にすべてのデータを渡すことができる場合は、便宜上、いずれにせよ1つ追加する必要があると主張できます。
user253751

690

MessageDigestクラスは、MD5ダイジェストのインスタンスを提供することができます。

文字列と暗号クラスを操作するときは、必ずバイト表現を入れたいエンコーディングを必ず指定してください。単に使用string.getBytes()する場合は、プラットフォームのデフォルトを使用します。(すべてのプラットフォームが同じデフォルトを使用するわけではありません)

import java.security.*;

..

byte[] bytesOfMessage = yourString.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

大量のデータがある場合は、.update(byte[])繰り返し呼び出すことができるメソッドを見てください。次にを呼び出し.digest()て、結果のハッシュを取得します。


“ LATIN1”!=“ ASCII”(または“ US-ASCII”)。ASCIIは7ビットの文字セット、Latin1は8ビットの文字セットです。彼らは同じではありません。
ボンベ、

8
(はるかに優れた理論的根拠と説明については、joelonsoftware.com / articles / Unicode.htmlを参照してください)
Piskvorが建物を去った

14
このトピックは、結果のバイトを16進文字列に変換する必要がある場合にも役立ちます。
weekens

1
次に、これをmysqlに挿入できるように、このダイジェストを文字列に変換するにはどうすればよいですか?
ハンフリー

2
さらに、可能な場合は使用してくださいyourString.getBytes(StandardCharsets.UTF_8)。これにより、UnsupportedEncodingException
Hummeling Engineering BV

267

実際にバイト配列ではなく文字列として返答が必要な場合は、常に次のようにすることができます。

String plaintext = "your text here";
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

12
@BalusC:真ではありません。BigInteger.toStringメソッドは、指定されたベースの完全な数値を返します。0x0606は606として出力され、末尾のゼロは省略されます
Spidey

11
マイナーなnitpick:getInstanceを呼び出した直後はm.reset()は必要ありません。もっとマイナー:「ここにあなたのテキスト」は二重引用符が必要です。
David Leppik

Java 11以降hashtext = "0".repeat(32 - hashtext.length()) + hashtextではwhile、の代わりにを使用できるため、エディターはループ内で文字列連結を行っているという警告を表示しません。
トム

m.update(plaintext.getBytes());の代わりに エンコーディングを指定することをお勧めします。m.update(plaintext.getBytes( "UTF-8"));など。getBytes()はエンコーディングを保証せず、システムによって異なる可能性があり、その結果、同じ文字列のシステム間でMD5結果が異なる可能性があります。
user1819780

256

MD5またはSHAダイジェストを作成するための非常に便利なメソッドを提供する、Apache CommonsコーデックプロジェクトのDigestUtilsクラスを確認することもできます。


2
特に、バイトデータの「安全な」エンコードされた表現を文字列形式で返すメソッド。
ロブ

4
ただし、大量のライブラリを追加したり、少なくとも2つ以上のクラスを必要とする「手動」でクラスを移植したりせずに、DigestUtilsクラスをプロジェクトに取り込む簡単な方法はありません。
iuiz 2011

Mavenリポジトリでもそれを見つけることができません。Grrrr。
sparkyspider

5
クレイジーにならない限り、中央のMavenリポジトリにある必要があります:groupId = commons-codec ArtifactId = commons-codec version = 1.5
Nick Spacek

160

これが見つかりました:

public String MD5(String md5) {
   try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes());
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
       }
        return sb.toString();
    } catch (java.security.NoSuchAlgorithmException e) {
    }
    return null;
}

以下のサイトでは、私はそれを信用していませんが、それが機能する解決策です!他の多くのコードが適切に機能しなかったため、ハッシュの0が欠落してしまいました。これはPHPと同じようです。出典:http : //m2tec.be/blog/2010/02/03/java-md5-hex-0093


15
で使用するエンコードを指定する必要があります。指定しgetBytes()ない場合、コードはプラットフォームやユーザー設定によって異なる結果になります。
パウロEbermann

@PaŭloEbermannはMessageDigest.getInstance( "MD5");を実行します。十分ではない?getBytes()に「MD5」を追加しようとしましたが、エラーが返されました
Blaze Tama

2
@BlazeTama "MD5"はエンコーディングではなく、メッセージダイジェストアルゴリズムです(新しいアプリケーションで使用すべきものではありません)。エンコーディングは、バイトを文字列に、文字列をバイトに変換するアルゴリズムのペアです。たとえば、「UTF-8」、「US-ASCII」、「ISO-8859-1」、「UTF-16BE」などです。この文字列のハッシュを計算する他のすべてのパーティと同じエンコーディングを使用してください。そうしないと、異なる結果が得られます。
–PaŭloEbermann 2014

6
文字セットの例については...(UTF-8を使用してください。これは私の意見では最良で最も互換性があります)...byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Richard

それは私の解決策ではなく、すべてのシナリオを自分でテストしなかったので、エンコードなどを指定することはおそらく良い考えだと思いますが、変更しないでおきます。
dac2009

88

これが私がそれを使う方法です:

final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));

ここで、Hexはorg.apache.commons.codec.binary.HexApache Commonsプロジェクトからです。


14
いずれにしても、Apache Commons Codecを使用する場合は、commons.apache.org
codec

13
最後の行を次のように置き換えますString result = Hex.encodeHexString(resultByte);
青みがかっ

84

commons-codec.jarをダウンロードして、md5のような完璧なphpを入手しました。こちらがマニュアルです。

プロジェクトにインポートして使用するだけです

String Url = "your_url";

System.out.println( DigestUtils.md5Hex( Url ) );

そこにあります。


1
これは、MySQL関数md5(str)と同じ戻り値を提供するメソッドです。他の多くの回答は他の値を返しました。
rwitzel 2015年

1
:Androidはこの回避策を必要のあるコモン・コーデック1.2、バンドルので、これは、Android上で正しく動作しませんstackoverflow.com/a/9284092/2413303
EpicPandaForce

76

これが最も明確で簡潔な方法であることがわかりました。

MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(StandardCharsets.UTF_8.encode(string));
return String.format("%032x", new BigInteger(1, md5.digest()));

3
すごい。先行ゼロをカットするという罠にはまりません。
Markus Pscheidt 2016年

2
APIレベル<19を使用している場合、これはAndroidでは機能しませんが、md5.update(string.getBytes( "UTF-8"));で2行目を変更する必要があることに注意してください。ただし、これにより、処理される別のチェック例外が追加されます...
Fran Marzoa

34

MD5ハッシュから文字列表現を取得するという点ではるかにクリーンなこのソリューションを見つけました。

import java.security.*;
import java.math.*;

public class MD5 {
    public static void main(String args[]) throws Exception{
        String s="This is a test";
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(s.getBytes(),0,s.length());
        System.out.println("MD5: "+new BigInteger(1,m.digest()).toString(16));
    }
}

ここからコードが抽出されました


2
なぜこの回答が-1であるのに対し、他のより短くて説明が少ない回答は+146であるのですか?
Nilzor 2013

4
BigIntegerを使用して16進値+1を取得するのはいいことです
Dave.B

5
あるケースでは、MD5の合計が31文字になるだけで、32文字ではないことがわかった
kovica

3
@kovicaこれは、私が正しく覚えていると、開始ゼロが切り捨てられるString.format("%032x", new BigInteger(1, hash)); ためです。これで解決するはずです 。「ハッシュ」はハッシュのバイト[]です。
Heshan Perera 2013

この回答には文字セットタイプのバグがあります!
Dawid Drozd、2015

31

別のオプションはGuava Hashingメソッドを使用することです:

Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();

Guavaを既に使用している場合は便利です(使用していない場合は、おそらく使用する必要があります)。


3
または、ショートカットメソッドの1つを使用する:Hashing.md5().hashString("my string").asBytes();
カートアルフレッドクルーバー

4
@KurtAlfredKlueverは 'Hashing.md5()。hashString( "my string"、Charsets.UTF_8).asBytes()'のような文字セットを挿入することを忘れないでください
Justin

31

別の実装:

import javax.xml.bind.DatatypeConverter;

String hash = DatatypeConverter.printHexBinary( 
           MessageDigest.getInstance("MD5").digest("SOMESTRING".getBytes("UTF-8")));

2
外部ライブラリを使用しない1ライナーのみを確認しました。
holmis83 2017

私が誤解しない限り、これは常に大文字で返され、hexを使用せずに作成されたmd5と一致しません。それが本当のmd5であるかどうかさえ本当にわからない
walshie4

2
@ walshie4 hexなしのMD5はありません(ietf.org/rfc/rfc1321.txtを参照)。小文字で取得するには、単に.toLower()を追加します。結果をen.wikipedia.org/wiki/MD5の例と比較すると、Javaライブラリコードが正しいと思われる可能性が高くなります。
スタッカー2017年

28

プレーンテキストを次の形式でハッシュに変換するクラス(ハッシュ)があります:md5またはsha1、phpが機能するシミラー(md5sha1):

public class Hash {
    /**
     * 
     * @param txt, text in plain format
     * @param hashType MD5 OR SHA1
     * @return hash in hashType 
     */
    public static String getHash(String txt, String hashType) {
        try {
                    java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);
                    byte[] array = md.digest(txt.getBytes());
                    StringBuffer sb = new StringBuffer();
                    for (int i = 0; i < array.length; ++i) {
                        sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
                 }
                    return sb.toString();
            } catch (java.security.NoSuchAlgorithmException e) {
                //error action
            }
            return null;
    }

    public static String md5(String txt) {
        return Hash.getHash(txt, "MD5");
    }

    public static String sha1(String txt) {
        return Hash.getHash(txt, "SHA1");
    }
}

JUnitとPHPを使用したテスト

PHPスクリプト:

<?php

echo 'MD5 :' . md5('Hello World') . "\n";
echo 'SHA1:' . sha1('Hello World') . "\n";

出力PHPスクリプト:

MD5 :b10a8db164e0754105b7a99be72e3fe5
SHA1:0a4d55a8d778e5022fab701977c5d840bbc486d0

JUnitでの例とテストの使用:

    public class HashTest {

    @Test
    public void test() {
        String txt = "Hello World";
        assertEquals("b10a8db164e0754105b7a99be72e3fe5", Hash.md5(txt));
        assertEquals("0a4d55a8d778e5022fab701977c5d840bbc486d0", Hash.sha1(txt));
    }

}

GitHubのコード

https://github.com/fitorec/java-hashes


@CedricSimonが言ったように、それはまさに私が探していたものです。ここで賛成投票してください。ありがとうございます。
Joabe Lucena、

24

複雑にする必要はありません。
DigestUtilsは正常に動作し、md5ハッシュを操作するときに快適になります。

DigestUtils.md5Hex(_hash);

または

DigestUtils.md5(_hash);

shaまたはなどの他の暗号化方法を使用することもできますmd


22

私のあまりはっきりしない答え:

private String md5(String s) {
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(s.getBytes(), 0, s.length());
        BigInteger i = new BigInteger(1,m.digest());
        return String.format("%1$032x", i);         
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

そして、String.format("%1$032X", big)大文字の形式持っている
アレックス・


17

以下を試すことができます。詳細とダウンロードコードはこちら:http : //jkssweetlife.com/java-hashgenerator-md5-sha-1/

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Example {

public static void main(String[] args) throws Exception {

    final String inputString = "Hello MD5";

    System.out.println("MD5 hex for '" + inputString + "' :");
    System.out.println(getMD5Hex(inputString));
}

public static String getMD5Hex(final String inputString) throws NoSuchAlgorithmException {

    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(inputString.getBytes());

    byte[] digest = md.digest();

    return convertByteToHex(digest);
}

private static String convertByteToHex(byte[] byteData) {

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < byteData.length; i++) {
        sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    }

    return sb.toString();
}
}

16

Bombeの答えは正しいですが、MD5を絶対に使用する必要がない限り(相互運用性のために強制されるなど)、MD5には長期間使用するための弱点があるため、SHA1を選択することをお勧めします。

SHA1にも理論上の脆弱性があるが、それほど深刻ではないことを付け加えておきます。ハッシュの現在の最先端では、置換ハッシュ関数の候補がいくつかありますが、SHA1を置き換えるための標準的なベストプラクティスとしてはまだ浮上していません。したがって、必要に応じて、ハッシュアルゴリズムを構成可能にして、将来的に置き換えられるようにすることをお勧めします。


それぞれの相対的な長所と短所について読むことができるリソースをいくつか教えていただけますか?
Akshay、

おそらく、現時点でできる最善のことは、SHA1を使用し、将来それを置き換える準備をすることです。新しい関数を使用することもできますが、それらはまだ大量の調査の対象ではありません。オンラインセキュリティリソースを追跡して、いつ変更されるかを確認できます。たとえば、Bruce Schneierのブログです。
frankodwyer 2009年

7
暗号的に安全なハッシュが必要でない限り、つまり、ハッシュが元のメッセージの再構築に役立ちたくない場合や、巧妙な攻撃者がハッシュに一致する別のメッセージを作成したくない場合を除き、SHA1は過剰です。オリジナルが秘密ではなく、ハッシュがセキュリティのために使用されていない場合、MD5は高速で簡単です。たとえば、Google Web ToolkitはJavaScript URLでMD5ハッシュを使用します(例:foo.js?hash = 12345)。
David Leppik

12

別の実装:Javaでの高速MD5実装

String hash = MD5.asHex(MD5.getHash(new File(filename)));

1
これは、依存関係が最小限の堅固なスタンドアロンライブラリです。いい物。
Ajax

とても重宝しました。4.57GBファイルには15357ミリ秒かかりましたが、Javaの組み込み実装には19094ミリ秒かかりました。
bkrish 2016年

11

これがこれを読んでいる人に関係があるかどうかはわかりませんが、私がしたかった問題がありました

  • 指定されたURLからファイルをダウンロードする し、
  • そのMD5を既知の値と比較します。

私はJREクラスのみでそれをしたかったのです(Apache Commonsなどではありません)。クイックWeb検索では、両方を同時に実行するサンプルコードスニペットは表示されず、各タスクのみが個別に表示されました。これには同じファイルを2回読み取る必要があるため、両方のタスクを統合するコードを記述し、ファイルのダウンロード中にオンザフライでチェックサムを計算することは、時間の価値があると考えました。これは私の結果です(完璧なJavaではない場合は申し訳ありませんが、とにかくあなたはアイデアを得ていると思います)。

import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.security.DigestOutputStream;        // new
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

void downloadFile(String fromURL, String toFile, BigInteger md5)
    throws IOException, NoSuchAlgorithmException
{
    ReadableByteChannel in = Channels.newChannel(new URL(fromURL).openStream());
    MessageDigest md5Digest = MessageDigest.getInstance("MD5");
    WritableByteChannel out = Channels.newChannel(
        //new FileOutputStream(toFile));  // old
        new DigestOutputStream(new FileOutputStream(toFile), md5Digest));  // new
    ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024);  // 1 MB

    while (in.read(buffer) != -1) {
        buffer.flip();
        //md5Digest.update(buffer.asReadOnlyBuffer());  // old
        out.write(buffer);
        buffer.clear();
    }

    BigInteger md5Actual = new BigInteger(1, md5Digest.digest()); 
    if (! md5Actual.equals(md5))
        throw new RuntimeException(
            "MD5 mismatch for file " + toFile +
            ": expected " + md5.toString(16) +
            ", got " + md5Actual.toString(16)
        );
}

1
ところで、私以外の誰もが私のJREの知識がいかに悪いことに気付く前に、私はDigestInputStreamDigestOutputStreamを発見しました。学習した内容を反映するように、元のソリューションを編集します。
kriegaex

6

次のリンクをご覧ください。例では、提供された画像のMD5ハッシュを取得しています。MD5 Hash of a Image


6

COMコンポーネントをインストールするプログラムの自然なキーからGUIDを合成したいので、その価値に気づきました。GUIDのライフサイクルを管理しないようにサイズを変更したい。MD5を使用してから、UUIDクラスを使用して文字列を取得します。(http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439がこの問題を引き起こします)。

いずれの場合でも、java.util.UUIDはMD5バイトから素敵な文字列を取得できます。

return UUID.nameUUIDFromBytes(md5Bytes).toString();

実際には、MD5バイト配列(サイズ== 16)だけを受け入れません。任意の長さのバイト配列を渡すことができます。MD5によってMD5バイト配列に変換されますMessageDigestnameUUIDFromBytes()ソースコードを参照)
Lu55

6
import java.security.*;
import javax.xml.bind.*;

byte[] bytesOfMessage = yourString.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytesOfDigest = md.digest(bytesOfMessage);
String digest = DatatypeConverter.printHexBinary(bytesOfDigest).toLowerCase();

6

md5関数を呼び出すだけでテキストのMD5ハッシュを実行できるPHPとは異なりmd5($text)、つまり、Javaでは少し複雑になりました。私は通常、md5ハッシュテキストを返す関数を呼び出すことで実装しました。ここに私がそれをどのように実装したかをmd5hashing示します。まず、以下に示すように、メインクラス内に名前を付けた関数を作成します。

public static String md5hashing(String text)
    {   String hashtext = null;
        try 
        {
            String plaintext = text;
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.reset();
            m.update(plaintext.getBytes());
            byte[] digest = m.digest();
            BigInteger bigInt = new BigInteger(1,digest);
            hashtext = bigInt.toString(16);
            // Now we need to zero pad it if you actually want the full 32 chars.
            while(hashtext.length() < 32 ){
              hashtext = "0"+hashtext;   
            }
        } catch (Exception e1) 
        {
            // TODO: handle exception
            JOptionPane.showMessageDialog(null,e1.getClass().getName() + ": " + e1.getMessage());   
        }
        return hashtext;     
    }

以下に示すように、必要なときにいつでも関数を呼び出します。

String text = textFieldName.getText();
String pass = md5hashing(text);

ここでは、PHPのmd5ハッシュと一致させるために、ハッシュテキストにゼロが追加されていることがわかります。


5

最高のセキュリティが必要ない場合、MD5は完全に問題なく、ファイルの整合性のチェックなどを行っている場合、セキュリティは考慮されません。このような場合、JavaライブラリーでもサポートされているAdler32など、より単純で高速なものを検討する必要があります。


2
ファイルの整合性はセキュリティの問題ではないと考える理由は何ですか?
Jeremy Huiskamp、2011年

5

これは、mysqlのmd5関数またはphpのmd5関数などから取得した正確なmd5を提供します。これは私が使用するものです(必要に応じて変更できます)

public static String md5( String input ) {
    try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(input.getBytes( "UTF-8" ));
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
            sb.append( String.format( "%02x", array[i]));
        }
        return sb.toString();
    } catch ( NoSuchAlgorithmException | UnsupportedEncodingException e) {
        return null;            
    }

}

4

これを試して:

public static String getHashMD5(String string) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        BigInteger bi = new BigInteger(1, md.digest(string.getBytes()));
        return bi.toString(16);
    } catch (NoSuchAlgorithmException ex) {
        Logger.getLogger(MD5Utils.class
                .getName()).log(Level.SEVERE, null, ex);

        return "";
    }
}

2
これは、先行ゼロを取り除くため、おそらく最悪のソリューションです。
Jannick

4
import java.security.MessageDigest

val digest = MessageDigest.getInstance("MD5")

//Quick MD5 of text
val text = "MD5 this text!"
val md5hash1 = digest.digest(text.getBytes).map("%02x".format(_)).mkString

//MD5 of text with updates
digest.update("MD5 ".getBytes())
digest.update("this ".getBytes())
digest.update("text!".getBytes())
val md5hash2 = digest.digest().map(0xFF & _).map("%02x".format(_)).mkString

//Output
println(md5hash1 + " should be the same as " + md5hash2)

1
これはコトリン語ですか?
Isuru

3
@IsuruはScalaのように見えます
ギルダー

4

パッケージ内のクラスのメソッドを使用することにより、特定のテキストのMD5ハッシュ生成できます。以下は完全なコードスニペットです。MessageDigestjava.security

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;

public class MD5HashGenerator 
{

   public static void main(String args[]) throws NoSuchAlgorithmException
   {
       String stringToHash = "MyJavaCode"; 
       MessageDigest messageDigest = MessageDigest.getInstance("MD5");
       messageDigest.update(stringToHash.getBytes());
       byte[] digiest = messageDigest.digest();
       String hashedOutput = DatatypeConverter.printHexBinary(digiest);
       System.out.println(hashedOutput);
   }
}

MD5関数からの出力は、32個の16進数で表される128ビットのハッシュです。

MySQLのようなデータベースを使用している場合は、これをより簡単な方法で行うこともできます。クエリSelect MD5(“text here”)は、括弧内のテキストのMD5ハッシュを返します。


2

これは私がここに来たものです-MD5ハッシュの文字列を返す便利なスカラ関数:

def md5(text: String) : String = java.security.MessageDigest.getInstance("MD5").digest(text.getBytes()).map(0xFF & _).map { "%02x".format(_) }.foldLeft(""){_ + _}

0
 import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;

/**
* MD5 encryption
*
* @author Hongten
*
*/
public class MD5 {

 public static void main(String[] args) {
     System.out.println(MD5.getMD5("123456"));
 }

 /**
  * Use md5 encoded code value
  *
  * @param sInput
  * clearly
  * @ return md5 encrypted password
  */
 public static String getMD5(String sInput) {

     String algorithm = "";
     if (sInput == null) {
         return "null";
     }
     try {
         algorithm = System.getProperty("MD5.algorithm", "MD5");
     } catch (SecurityException se) {
     }
     MessageDigest md = null;
     try {
         md = MessageDigest.getInstance(algorithm);
     } catch (NoSuchAlgorithmException e) {
         e.printStackTrace();
     }
     byte buffer[] = sInput.getBytes();

     for (int count = 0; count < sInput.length(); count++) {
         md.update(buffer, 0, count);
     }
     byte bDigest[] = md.digest();
     BigInteger bi = new BigInteger(bDigest);
     return (bi.toString(16));
 }
}

それに関するCodingkitに関する記事があります。チェックアウト:http : //codingkit.com/a/JAVA/2013/1020/2216.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.