Javaの言語MD5暗号化
背景ノート
実際のプロジェクトでは、安全上の配慮のために、しばしば必要とアカウントのパスワードの暗号文が暗号化され、データベースに保存されました。
このように、誰かが暗号文のパスワードデータベースを取得した場合でも、私は平文パスワード情報がシステムに悪質なアクセスを防止するかわかりません。
パスワードの暗号化など、多くの方法、ありますBase64で、DSA、RSA、MD5、SHA128、SHA256、SHA512などの暗号化が。
本論文では、MD5暗号化を説明しています。
MD5プロフィール
MD5メッセージダイジェストアルゴリズム(英語:MD5 Mの essage - D igestアルゴリズム)、広く使用されている暗号ハッシュ関数 128ビット(16生成することができ、バイト)のハッシュ値(ハッシュ値)を確保するため完全で一貫性のある情報伝達。
アメリカ人によるMD5は暗号学者ロナルド・リベストを置き換えるために設計された1992のパブリック(ロナルド・リベストリン)で、MD4のアルゴリズムを。
MD5アプリケーション
1、データの暗号化
その利点を取るの一方向の暗号化され、不可逆的な、我々はできるには適用された暗号化データおよびパスワード。
一方向MD5アルゴリズムので、元から計算MD5コードはほとんど不可能です。現時点では、この暗号化方式を破る方法については、このようなので、上の生年月日、ID番号、電話番号、などの一般的に使用されるパスワードのフォームを、収集することです。MD5による治療後に集め、これらの秘密は保存され、その後、データ収集が一定数に達した場合、ユーザーのパスワードは、可能性は非常に大きくなってしまう危険にさらされているMD5を復元する必要がある、と比較します。
この方法のために、方法のセキュリティを強化する方法は、この後、ユーザ・パスワードMD5処理は、例えば、元のパスワードは、「パスワード」であり、処理時間が「passworddrowssap」になったときに元のパスワードの近傍に値を追加することです効果的に処理した後に侵害されるパスワードの可能性を低減することができます。
2、ファイルが改ざんされていることを確認してください
各ファイルには、できる計算、特定のMD5値を。
例えば、我々は、サーバーにファイルをアップロードすると同時にファイルに対応するMD5値を計算することができます。
再度ファイルのMD5の値を算出することで、ファイルをダウンロードした場合。
2つのMD5値は、ファイルが変更されていないことを示し、同じであれば、そうでない場合、ドキュメントは変更されています。
Javaの言語MD5暗号化
任意の文字列のMD5暗号化を達成するために、Javaのプログラミングを通じて。
図1に示すように、コードの最初のバージョン(元のバージョン)
コードは以下の通りであります:
パッケージcom.miracle.luna.md5; インポートjava.io.UnsupportedEncodingException; インポートjava.security.MessageDigestの; インポートjava.security.NoSuchAlgorithmException; / ** * 2019年11月18日ミラクルルナONによって作成 * / パブリック クラスMd5UtilOriginal { / ** * MD5は、データを暗号化し、出力形式の16進文字列 * @paramのデータ * @return * / パブリック 静的文字列MD5(データ列){ 試み{ バイト [] = MD5 MD5(data.getBytes( "UTF-8" )); リターンtoHexString(MD5); } キャッチ(にUnsupportedEncodingException E){ e.printStackTrace(); } リターン "" ; } / ** * MD5がバイト配列を暗号化 * @param データ * @return * / パブリック 静的 バイト [] MD5 (バイト[]データ){ 試み{ するMessageDigest MD = MessageDigest.getInstance( "MD5" ); 戻りmd.digest(データ); } キャッチ(持つNoSuchAlgorithmException E){ e.printStackTrace(); } 戻り 新しい新しい バイトを{} []; } / ** *暗号化されたバイト配列、進文字列に変換する * @param MD5 * @return * / プライベート 静的文字列toHexString(バイト[] MD5){ StringBuilderのSB = 新しい新規のStringBuilder(); のSystem.out.println( "md5.length:" + md5.length); のため(バイトB:MD5){ sb.append(Integer.toHexString(B& 0xFFの)); } 戻りsb.toString(); } パブリック 静的 ボイドメイン(文字列[]引数){ 文字列のパスワード =「パスワード」。 文字列md5HexStr = MD5(パスワード); System.out.println( "==> MD5加密前:" + パスワード)。 System.out.println( "==> MD5加密后:" + md5HexStr)。 } }
結果は以下の通りであります:
md5.length:16
==> MD5前:パスワード
==> MD5は暗号化された:5f4dcc3b5aa765d61d8327deb882cf99を
2、Second Editionのコード(ライト)
コードは以下の通りであります:
以下のためのパッケージ変更com.miracle.luna.md5; インポートjava.nio.charset.StandardCharsets; インポートjava.security.MessageDigestの; インポートjava.security.NoSuchAlgorithmException; / ** *ミラクルルナON 2019年11月18日によって作成 * / パブリック クラス{Md5UtilSimple / ** * MD5は、データを暗号化し、出力形式の16進文字列 * @paramのデータ * @return * / パブリック 静的文字列MD5(データ列){ StringBuilderのSB = 新しい新規のStringBuilder(); 試み{ するMessageDigest MDMessageDigest.getInstance =( "MD5" ); バイト [] = MD5 md.digest(data.getBytes(StandardCharsets.UTF_8)); // データを16進数に変換されるバイト のための(バイトB:MD5){ SB .append((B Integer.toHexString&0xFFでの)); } } キャッチ(持つNoSuchAlgorithmException E){ e.printStackTrace(); } 戻りsb.toStringを(); } 公共の 静的な 無効メイン(文字列[]引数){ 文字列のパスワード = 「パスワード」。 Md5HexStrストリング= MD5(パスワード) のSystem.out.printlnは( "==> MD5前:" + パスワード) のSystem.out.println( "==> MD5は、暗号化された:" + md5HexStr); } }
結果は以下の通りであります:
==> MD5暗号化の前に:パスワード
==> MD5は暗号化された:5f4dcc3b5aa765d61d8327deb882cf99を
3、コードの第3版(最終最適化バージョン)
コードは以下の通りであります:
パッケージcom.miracle.luna.md5; // 必要に応じてここに組み込ま1.13.jar-CODEC-コモンズ インポートorg.apache.commons.codec.binary.Hex ; インポートjava.nio.charset.StandardCharsets; インポートjava.security.MessageDigestの; インポートjava.security.NoSuchAlgorithmException; / ** * 2019年11月18日ミラクルルナONによって作成 * / パブリック クラスMd5Util { / ** MD5は、データを暗号化し、出力形式の16進文字列* * @param データ * @return * / パブリック 静的な文字列のMD5(データ列){ 試み{ するMessageDigest MD = MessageDigest.getInstance( "MD5" )。 リターンHex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8))); } キャッチ(持つNoSuchAlgorithmException電子){ e.printStackTrace(); } を返します「」。 } パブリック 静的 ボイドメイン(文字列[]引数){ 文字列のパスワード =「パスワード」。 文字列md5HexStr = MD5(パスワード); System.out.println( "==> MD5加密前:" + パスワード)。 System.out.printlnは("==> MD5後:" + md5HexStr); } }
結果は以下の通りであります:
==> MD5暗号化の前に:パスワード
==> MD5は暗号化された:5f4dcc3b5aa765d61d8327deb882cf99を
コモンズ・コーデック1.13.jarのポンポンリファレンス次のように:
<! - https://mvnrepository.com/artifact/commons-codec/commons-codec - > < 依存> < groupIdを>コモンズ・コーデック</ groupIdを> < たartifactId >コモンズ・コーデック</ たartifactId > < バージョン> 1.13 </ バージョン> </ 依存関係>
オンラインMD5暗号化&復号化ツール
オンライン1、MD5暗号化ツール
http://www.bejson.com/enc/md5/ (だけでなく、MD5暗号化をサポートし、またなどBase64で、SHAをサポートしています)
結果は、として、「暗号化の前に、」文字列の入力ボックスに(次のMD5暗号化を必要としている - 表示ボックスで暗号化された暗号文「暗号化」を参照してください> - >「MD5暗号化」をクリックしてください):
2、MD5暗号解読オンライン
結果は以下のように(入力ボックスMD5暗号文は、復号化する復号クリックを解読するために)、次のとおりです。
2) https://www.cmd5.com/ (これだけではなく、非常に強力な暗号解読ツールであるMD5、SHAもの復号化をサポートしてサポートしています)
(暗号文の入力ボックスによって、MD5暗号文の入力を平文MD5を見て、「解読」をクリックしてください)結果は以下の通りであります:
復号多くの種、次のように選択:
MD5パスワードセキュリティの最適化
パスワードは、特定のセキュリティリスク(暴力をクラックする可能性が)今直接MD5アルゴリズムを使用しているされているので、我々はいくつかのロジックを実行するために、パスワードの暗号化プロセスの実際のニーズに応じてすることができます。
例えば、次のロジック:
1)パスワード - > Base64で暗号化、パスワードのAは、暗号化を取得します。
2)パスワード - >フリップ所与のdrowssap - > MD5は、暗号化を得るためにパスワードBを暗号化されました。
3)パスワードパスワードA + Bスプライス - > MD5は、C得られた暗号化されたパスワードを暗号化されました。
4)パスワードC - >操作を逆に、最終的な暗号文パスワードとしてデータベースにパスワードDを生成します。
これは、パスワードセキュリティを強化し、クラックの発生の可能性を減少させます。(本明細書では特定の論理最適化は、実際のニーズや好みに応じて、柔軟性は、その変換の複雑度を定義します)。
[補足]
ときに、データベースに格納されたMD5パスワード、ユーザのログイン時に、変速機の後端にユーザが入力した平文パスワードのフロントエンド。
MD5は、同じ処理ロジックの比較により、そのプログラム後端を暗号化されたデータベースでは、ユーザーの暗号テキストパスワードをパスワードを暗号化されました。
それらは、ユーザがシステムへのアクセスを許可する、正しいパスワードを入力することを示す、等しい場合、そうでない場合、パスワードが正しくないことを示す、アクセスを禁止します。
また、にセキュリティ上の考慮事項システム、コードを解読しようとする悪質な暴力を防止し、私たちはしばしば制限するユーザーをパスワードエラー入ることの時間を。
例えば、5回または3回入力されたパスワードの連続し、自動的になりますアカウントロック(ロングロックを設定し、実際の場面に基づいて)時間を。
Base64で暗号化&復号化 Java言語の、ブログを参照してください。https://www.cnblogs.com/miracle-luna/p/11128734.html
私はあなたを助けるために願って、ありがとうございました!