バウンシーキャッスルでAESアルゴリズムを使用してJ2MEでデータを暗号化および復号化したいのですが、そのためのサンプルコードを教えてください。
PKCS5PaddingでECBを使いたい
前もって感謝します。
バウンシーキャッスルでAESアルゴリズムを使用してJ2MEでデータを暗号化および復号化したいのですが、そのためのサンプルコードを教えてください。
PKCS5PaddingでECBを使いたい
前もって感謝します。
そこに例があると確信していますが、私はそれらを見つけていません。始めるのに役立つヒントをいくつか紹介します。BCクラスを相互に接続する方法を学ぶ必要があります。まず、弾力のある城のソースコードを入手し、質問があるときにそれを見る準備をします。それは実際には非常に読みやすいので、ドキュメントが貧弱なときにそれを調べることを恐れないでください。たとえば、多くのクラスはCipherParameters
オブジェクトのインスタンスを必要としますが、ドキュメントでこれ以上の詳細を指定することはめったにありません。ただし、ソースコードでは、どの実装クラスが期待されているかは明らかです。
たとえばAESEngine
、暗号化エンジンとしてAESエンジンの1つを選択します。次にモードを選択します。ECBが正しいことはめったにないため、たとえばCBCモードを選択した場合は、CBCBlockCipher
オブジェクトからオブジェクトを作成しAESEngine
ます。次に、このオブジェクトを使用してオブジェクトを作成しPaddedBufferBlockCipher
ます。デフォルトのコンストラクターは、必要なPKCS5パディングと同じPKCS7パディングを使用します。次に、キーとIVを保持するオブジェクトを作成する必要があります。これがCipherParameters
インターフェースです。オブジェクトは2つのステップで作成します。まず、KeyParameter
キーを使用してオブジェクトを作成します。次に、オブジェクトとIVを使用してParametersWithIV
オブジェクトを作成します。KeyParameter
このオブジェクトはオブジェクトのinit
メソッドに提供され、PaddedBufferBlockCipher
準備が整います。
編集
ここに小さな例があります:
private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data)
throws Exception
{
int minSize = cipher.getOutputSize(data.length);
byte[] outBuf = new byte[minSize];
int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
int length2 = cipher.doFinal(outBuf, length1);
int actualLength = length1 + length2;
byte[] result = new byte[actualLength];
System.arraycopy(outBuf, 0, result, 0, result.length);
return result;
}
private static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception
{
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(false, ivAndKey);
return cipherData(aes, cipher);
}
private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception
{
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(true, ivAndKey);
return cipherData(aes, plain);
}