セキュリティを考慮した、可逆的暗号化の相互運用の仕組みを実現する方法(JavaのAES編)


 

前回はSalesforceでの暗号化、復号化の仕組みをご紹介しました。

今回はJavaでの仕組みの回となります。

また、Base64化した暗号文字列をやり取りすることで、相互に可逆的な暗号化テキストのやり取りが行えるところまで試してみましょう。

 

JavaによるAES暗号化

はじめに暗号化を行います。

Cipher cipher = Cipher.getInstance(cipherTransformation);
最初にCipherクラスをインスタンス化します。引数のcipherTransformationは「AES/CBC/PKCS5Padding」ですね。最初のAES は暗号化の方式、次のCBCはモードです。モードは簡単に言うと、処理方法みたいなものです。最後のPKCS5Paddingはパディング方式になります。詳しくはJavaのこのページを参照してください。
https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Cipher.html

SecretKeySpec secretKeySpecy = new SecretKeySpec(keyString.getBytes(characterEncoding), aesEncryptionAlgorithm);
このコードで秘密鍵を生成します。keyStringに指定された文字列をもとに生成するので、この文字列が漏洩しないように気を付けましょう。

IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
このコードで初期化ベクトルを生成します。初期化ベクトルは、同じ鍵を使った暗号化でも、毎回違った結果を出すための引数のようなものだと考えると良いと思います。

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpecy, ivParameterSpec);
上記までに生成した秘密鍵と初期化ベクトルをもとに、Cipherクラスをinitします。これで準備ができましたので、あとは、cipher.doFinalで実際にテキストを暗号化します。

 

復号

では、復号の方も行ってみましょう。

復号もやっていることは暗号化の逆なので、ほとんど変わらないですね。暗号化のところで出力したBase64を最後に施した文字列を受け取って復号するクラスになります。

 

下は、前回のSalesforceで生成したBase64の暗号化文字列を復号するコードになります。初期化ベクトルの関係でしょうか、最初の16Byteを削らないと正常に複合できませんでした。この理由についてはまた、別途調査しようと思いますが。。

 

 

こんな記事も読まれています


One Response to “セキュリティを考慮した、可逆的暗号化の相互運用の仕組みを実現する方法(JavaのAES編)”

  1. […] 他の言語での暗号化の例として、Javaを記事にしましたので、ご参照ください。 […]

コメントを残す

サブコンテンツ

このページの先頭へ