シンプルな Java 暗号化アルゴリズムは次のとおりです。
1. BASE64 Base64 は、インターネット上で 8 ビットバイトコードを伝送するための最も一般的なエンコード方式の 1 つです。MIME の詳細な仕様については、RFC2045 ~ RFC2049 を参照してください。 HTTP 環境でより長い識別情報を送信するには、Base64 エンコーディングを使用できます。たとえば、Java Persistence システムの Hibernate では、Base64 を使用して、より長い一意の識別子 (通常は 128 ビットの UUID) を文字列にエンコードし、HTTP フォームや HTTP GET URL のパラメータとして使用します。他のアプリケーションでは、バイナリ データを URL に配置するのに適した形式 (非表示のフォーム フィールドを含む) にエンコードする必要があることがよくあります。現時点では、Base64 エンコードは判読不可能であり、エンコードされたデータを肉眼で直接見ることはできません。 (出典:百度百科事典) Java実装コード: パッケージ com.cn.一方向暗号化; sun.misc.BASE64Decoder をインポートします。 sun.misc.BASE64Encoder をインポートします。 /* BASE64 暗号化と復号化は双方向であり、逆も可能です。 BASE64Encoder と BASE64Decoder は非公式の JDK 実装クラスです。 JDK では見つかり、使用できますが、API では見つかりません。 JRE の sun および com.sun で始まるパッケージ内のクラスはドキュメント化されていません。これらは java および javax クラス ライブラリの基礎であり、その実装のほとんどは基礎となるプラットフォームに関連しています。 一般的に言えば、それは推奨されません。 厳密に言えば、BASE64 は暗号化アルゴリズムではなくコーディング形式です。主に BASE64Encoder と BASE64Decoder の 2 つのクラスで構成されます。必要なのは、対応するメソッドの使い方だけです。 また、BASE暗号化後に生成されるバイト数は8の倍数です。足りない場合は=記号で埋められます。 BASE64 RFC2045 の定義によると、Base64 は次のように定義されています: Base64 コンテンツ転送エンコーディングは、人間が直接認識しにくい形式で 8 ビット バイトのシーケンスを記述するように設計されています。 (Base64 コンテンツ転送エンコーディングは、人間が判読する必要のない形式で任意のオクテットのシーケンスを表すように設計されています。) これは電子メールや http 暗号化では一般的です。http 情報を傍受すると、ログイン操作のユーザー名とパスワードのフィールドが BASE64 を使用して暗号化されていることがわかります。 */ パブリッククラス BASE64 { /** * BASE64復号化 * * @param キー * @戻る * @例外をスローします */ パブリック静的byte[] decryptBASE64(String key)は例外をスローします{ (新しい BASE64Decoder()).decodeBuffer(key) を返します。 } /** *BASE64暗号化* * @param キー * @戻る * @例外をスローします */ パブリック静的文字列encryptBASE64(byte[] key)は例外をスローします{ (新しい BASE64Encoder()).encodeBuffer(key) を返します。 } パブリック静的voidメイン(String[] args) { 文字列 str="12345678"; 試す { 文字列結果1 = BASE64.encryptBASE64(str.getBytes()); System.out.println("result1=====暗号化されたデータ==========="+result1); バイト result2[] = BASE64.decryptBASE64(result1); 文字列 str2 = 新しい文字列 (結果2); System.out.println("str2========復号化されたデータ========="+str2); } キャッチ (例外 e) { e.printStackTrace(); } } } 2. MD5 MD5 はMessage-Digest Algorithm 5 の略で、情報伝送の整合性と一貫性を確保するために使用されます。コンピュータで広く使われているハッシュアルゴリズム(要約アルゴリズム、ハッシュアルゴリズムとも訳される)の一つで、主流のプログラミング言語ではMD5が一般的に実装されています。ハッシュ アルゴリズムの基本原理は、データ (漢字など) を別の固定長の値に変換することです。MD5 の前身には、MD2、 MD3 、MD4 があります。暗号化および復号化技術で広く使用されており、ファイルの検証によく使用されます。チェック?ファイルのサイズに関係なく、MD5 を実行すると一意の MD5 値を生成できます。たとえば、現在の ISO 検証はすべて MD5 検証です。使い方は?もちろん、MD5 値は ISO を MD5 に渡すことによって生成されます。通常、Linux-ISO をダウンロードした友人は、ダウンロード リンクの横に MD5 文字列が表示されていることを確認済みです。ファイルの整合性を確認するために使用されます。 Java実装: パッケージ com.cn.一方向暗号化; java.math.BigInteger をインポートします。 java.security.MessageDigest をインポートします。 /* MD5 (メッセージダイジェストアルゴリズム5) 通常、上記の MD5 暗号化を直接使用することはありません。通常、MD5によって生成されたバイト配列は、BASE64に渡されてさらに暗号化され、対応する文字列ダイジェスト: アセンブリ*/ を取得します。 パブリッククラスMD5 { パブリック静的最終文字列 KEY_MD5 = "MD5"; パブリック静的文字列 getResult(文字列 inputStr) { System.out.println("=======暗号化前のデータ:"+inputStr); BigInteger bigInteger=null; 試す { メッセージダイジェスト md = MessageDigest.getInstance(KEY_MD5); バイト[] inputData = inputStr.getBytes(); md.update(入力データ); bigInteger = 新しい BigInteger(md.digest()); } 例外 e をキャッチします {e.printStackTrace();} System.out.println("MD5暗号化後: " + bigInteger.toString(16)); bigInteger.toString(16) を返します。 } パブリック静的void main(String args[]) { 試す { 文字列 inputStr = "シンプルな暗号化 888888888888888888888"; 入力文字列を取得します。 } キャッチ (例外 e) { e.printStackTrace(); } } } MD5 アルゴリズムには次の特性があります。 1. 圧縮: 任意の長さのデータに対して、計算された MD5 値の長さは固定されます。 3. SHA セキュア ハッシュ アルゴリズムは、主にデジタル署名標準 (DSS) で定義されているデジタル署名アルゴリズム (DSA) に適用されます。長さが 2^64 ビット未満のメッセージの場合、SHA1 は 160 ビットのメッセージ ダイジェストを生成します。このアルゴリズムは、暗号化の専門家による長年の開発と改良を経て、ますます完成度が高まり、広く使用されるようになりました。このアルゴリズムの考え方は、平文を受け取り、それを不可逆な方法で(通常はより小さい)暗号文に変換することです。これは、入力コードの文字列(事前マッピングまたは情報と呼ばれる)を取得し、それをより短い固定ビット数の出力シーケンス、つまりハッシュ値(メッセージダイジェストまたは情報認証コードとも呼ばれる)に変換するプロセスとして簡単に理解することもできます。ハッシュ関数の値は平文の「指紋」や「要約」とも言えるため、ハッシュ値のデジタル署名は平文のデジタル署名とみなすことができます。 Java実装: パッケージ com.cn.一方向暗号化; java.math.BigInteger をインポートします。 java.security.MessageDigest をインポートします。 /* SHA(セキュアハッシュアルゴリズム)、デジタル署名、暗号化アプリケーションにおけるその他の重要なツール、 電子商取引などの情報セキュリティ分野で広く利用されています。 SHAとMD5は衝突法によって解読されているが、 しかし、SHAは依然として安全な暗号化アルゴリズムとして認識されており、MD5よりも安全です*/ パブリッククラスSHA { パブリック静的最終文字列 KEY_SHA = "SHA"; パブリック静的文字列 getResult(文字列 inputStr) { BigInteger sha =null; System.out.println("=======暗号化前のデータ:"+inputStr); バイト[] inputData = inputStr.getBytes(); 試す { メッセージダイジェスト messageDigest = MessageDigest.getInstance(KEY_SHA); メッセージダイジェストを更新します(入力データ)。 sha = 新しい BigInteger(messageDigest.digest()); System.out.println("SHA暗号化後: " + sha.toString(32)); } 例外 e をキャッチします {e.printStackTrace();} sha.toString(32)を返します。 } パブリック静的void main(String args[]) { 試す { 文字列 inputStr = "単純な暗号化"; 入力文字列を取得します。 } キャッチ (例外 e) { e.printStackTrace(); } } } SHA-1とMD5の比較 どちらも MD4 から派生しているため、SHA-1 と MD5 は非常によく似ています。したがって、それらの強度やその他の特性は似ていますが、いくつかの違いがあります。 4.HMAC HMAC(ハッシュメッセージ認証コード)は、鍵付きハッシュアルゴリズムに基づく認証プロトコルです。メッセージ認証コードの原理は、公開関数と鍵を使用して固定長の値を認証識別子として生成し、この識別子を使用してメッセージの整合性を識別することです。鍵は固定サイズの小さなデータブロック、つまりMACを生成するために使用され、メッセージに追加されて送信されます。受信者は、送信者と共有した鍵を使用して認証などを行います。 Java実装コード: パッケージ com.cn.一方向暗号化; /* HMAC HMAC (ハッシュ メッセージ認証コード、ハッシュ メッセージ認証コード、キーベースのハッシュ アルゴリズムに基づく認証プロトコル)。 メッセージ認証コードの原理は、公開関数とキーを使用して固定長の値を認証識別子として生成し、この識別子を使用してメッセージの整合性を識別することです。 キーを使用して、固定サイズの小さなデータ ブロックを生成します。 つまり、MAC であり、メッセージを送信する前にメッセージに追加します。受信者は、送信者と共有したキーを認証などの目的で使用します。 */ javax.crypto.KeyGenerator をインポートします。 javax.crypto.Mac をインポートします。 javax.crypto.SecretKey をインポートします。 javax.crypto.spec.SecretKeySpec をインポートします。 com.cn.comm.Tools をインポートします。 /** * 基本的な暗号化コンポーネント */ パブリック抽象クラス HMAC { パブリック静的最終文字列 KEY_MAC = "HmacMD5"; /** * HMACキーを初期化する * * @戻る * @例外をスローします */ パブリック静的文字列 initMacKey() 例外をスローします { キージェネレーター keyGenerator = KeyGenerator.getInstance(KEY_MAC); 秘密キー secretKey = keyGenerator.generateKey(); BASE64.encryptBASE64(secretKey.getEncoded()) を返します。 } /** * HMAC暗号化:主な方法 * * @param データ * @param キー * @戻る * @例外をスローします */ パブリック静的文字列encryptHMAC(byte[]データ、文字列キー)は例外をスローします{ SecretKey secretKey = new SecretKeySpec(BASE64.decryptBASE64(key), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(秘密キー); 新しい文字列(mac.doFinal(data))を返します。 } パブリック静的文字列 getResult1(文字列 inputStr) { 文字列パス=Tools.getClassPath(); 文字列 fileSource=path+"/file/HMAC_key.txt"; System.out.println("=======暗号化前のデータ:"+inputStr); 文字列結果=null; 試す { バイト[] inputData = inputStr.getBytes(); 文字列 key = HMAC.initMacKey(); /*キーを生成*/ System.out.println("Mac キー: ===" + キー); /*キーをファイルに書き込む*/ Tools.WriteMyFile(ファイルソース、キー); 結果 = HMAC.encryptHMAC(入力データ、キー); System.out.println("HMAC 暗号化後: ===" + 結果); } 例外 e をキャッチします {e.printStackTrace();} 結果.toString() を返します。 } パブリック静的文字列 getResult2(文字列 inputStr) { System.out.println("=======暗号化前のデータ:"+inputStr); 文字列パス=Tools.getClassPath(); 文字列 fileSource=path+"/file/HMAC_key.txt"; 文字列キー=null;; 試す { /*ファイルからキーを読み取ります*/ キー=Tools.ReadMyFile(fileSource); System.out.println("getResult2 キー: ===" + キー); } キャッチ (例外 e1) { e1.printStackTrace();} 文字列結果=null; 試す { バイト[] inputData = inputStr.getBytes(); /*データを暗号化する*/ 結果 = HMAC.encryptHMAC(入力データ、キー); System.out.println("HMAC 暗号化後: ===" + 結果); } 例外 e をキャッチします {e.printStackTrace();} 結果.toString() を返します。 } パブリック静的void main(String args[]) { 試す { 文字列 inputStr = "単純な暗号化"; /*同じキーを使用してデータを暗号化し、2つの暗号化の結果が同じかどうかを確認します*/ 結果1を取得します(入力文字列); 結果2を取得します(入力文字列); } キャッチ (例外 e) { e.printStackTrace(); } } }
|
<<: いくつかの典型的なアルゴリズム面接の質問に対する Java ソリューション
>>: Appleがニュース編集者を雇っているにもかかわらず、アルゴリズムがあなたが読むものを決定する
災害に直面して、すべての関係者が行動を起こした。人民解放軍部隊が被災者の救出に派遣されているとみられ...
類似の質問とは何ですか? また、なぜ類似の質問を書く必要があるのですか?類似質問はロボット教育を改善...
機械学習に関する知識が増えるにつれて、機械学習アルゴリズムの数も増えました。この記事では、データ サ...
Google Gemini 1.5 が、その見出しをさらった「犯人」であるSoraと出会ったら何が起...
【51CTO.com クイック翻訳】ロボティックデータオートメーション (RDA) とは?ロボティッ...
Apple の大規模言語モデルと AI チャットボットに関する最新ニュースが届きました。本日、ブル...
ChatGPT ですら首をかしげたアルゴリズムの最適化は、北京大学のチームによって達成されました。...
2月10日のニュース(劉亜珠)最近、科学者たちは変形して運転、飛行、水泳ができる新しい「ソフト」ロボ...
今日、テクノロジーの巨人とその AI ベースのデジタル プラットフォームおよびソリューションは、世界...
これらの AI 搭載ガジェットはあなたの家をスマートにします。 『2001年宇宙の旅』の全知全能のH...
テクノロジーとイノベーションがダイナミックに変化する中、人工知能 (AI) の研究は学生や専門家にと...
2030 年までに RSA 暗号を解読できるマシンが登場するでしょうが、まずは量子センシングやその他...
[[286163]]質問: 空でない 2 つのリンク リストが与えられた場合、2 つの負でない整数...