こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事のうち 、Jakob Jenkovによる4番目の記事「Java Mac」の翻訳を紹介します。
目次:
- Java暗号化
- Java暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
メッセージ認証コード(MAC)
Java Mac( javax.crypto.Mac )は、バイナリデータからメッセージ認証コード(MAC)を作成します。 MACは、秘密鍵で暗号化されたメッセージダイジェストです。 秘密鍵を使用した場合のみ、MACを認証できます。
インスタンス化
Macクラスを使用する前に、Macのインスタンスを作成する必要があります。 Macクラスのインスタンスは、 getInstance()メソッドを使用して作成されます。 Macインスタンスを作成する例を次に示します。
Mac mac = Mac.getInstance("HmacSHA256");
getInstance()に渡される文字列パラメーターには、使用されるアルゴリズムの名前が含まれます。 この場合、HmacSHA256アルゴリズムが使用されます。
初期化
インスタンスを作成したら、Macを初期化する必要があります。 Macインスタンスは、インスタンスが使用する秘密鍵をパラメーターとして渡すinit()メソッドを呼び出すことにより初期化されます。 Macインスタンスを初期化する例を次に示します。
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key);
init()メソッドはKeyのインスタンスを受け入れます。 この例では、Keyインターフェースを実装するSecretKeySpecを使用します。
MAC計算
MACインスタンスを使用して(初期化後)、MACデータの計算を開始できます。 MAC値を計算するには、 update()またはdoFinal()メソッドを呼び出します。 MACを計算するためのデータブロックが1つしかない場合は、 doFinal()を直接呼び出すことができます。次に例を示します。
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data);
MACを計算するための複数のデータブロックがある場合、たとえば、ブロックごとにファイルを読み取る場合、各ブロックに対してupdate()メソッドを呼び出し、最後のブロックでdoFinal()で終了する必要があります。 以下に例を示します。
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal();