シンプルな 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がニュース編集者を雇っているにもかかわらず、アルゴリズムがあなたが読むものを決定する
ロボット工学は考えられるあらゆる分野に応用できます。教育、旅行、防衛など、あらゆる分野でロボット工学...
エリアス・ファロン氏は、電子設計自動化技術の大手プロバイダーである Cadence Design S...
[[432936]] [51CTO.com クイック翻訳]昨今、ディープラーニング、特に自然言語処理...
偉大な科学的成果は試行錯誤だけでは達成できません。たとえば、宇宙計画におけるすべての打ち上げは、空気...
[[267184]] [51CTO.com クイック翻訳] 近年の機械学習技術の急速な発展により、ネ...
[[146153]]アルゴリズムとは何ですか?簡単に言えば、問題を解決するための手順がアルゴリズム...
人工知能 (AI) の台頭とさまざまな業界への統合の増加に伴い、プロジェクト管理も進化しています。 ...
McKinsey & Company の画期的なレポートでは、AI を含むデジタル調達ソリュ...
[[321195]]ビッグデータダイジェスト制作ダニエル・ホワイトナック編集者: lin、Cao P...
今日、人工知能 (AI) はほぼすべての業界とすべての人に影響を及ぼしています。この驚くべき技術は、...
明日のフライトとホテルを予約し、天気を確認する。このようなシナリオは誰もが経験したことがあると思いま...
事前トレーニングの時代に入ってから、視覚認識モデルのパフォーマンスは急速に向上しましたが、生成的敵対...
10月26日、「人工知能分野での中国初の上場企業」であるXiaoi RobotがHuazang Un...