Android プロジェクトでの暗号化に次のコードを使用しています。
SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
String key = "abcdefg";
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
SecretKey _key = kf.generateSecret(keySpec);
String xform = "DES";
Cipher cipher = Cipher.getInstance(xform);
byte[] IV = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 18, 69, 17, 72, 94, 18, 30 };
IvParameterSpec ips = new IvParameterSpec(IV);
cipher.init(Cipher.ENCRYPT_MODE, _key, ips);
String plainText = "abcdeffdkflsdkf";
byte[] cipherText = cipher.doFinal(plainText.getBytes());
この暗号化されたデータをファイルに書き込み、次のコードを使用している Java プロジェクトでこのファイルを復号化したいと考えています。
SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
String key = "abcdefg";
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
SecretKey _key = kf.generateSecret(keySpec);
String xform = "DES";
Cipher cipher = Cipher.getInstance(xform);
byte[] IV = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 18, 69, 17, 72, 94, 18, 30 };
IvParameterSpec ips = new IvParameterSpec(IV);
cipher.init(Cipher.DECRYPT_MODE, _key, ips);
String cipherText;
//cipher text is read from file.
byte[] plainText = cipher.doFinal(cipherText.getBytes());
しかし、それは機能していません。操作モード (つまりCBC/ECB
) とパディング メソッド (つまりPKCS5Padding/NoPadding
) を指定せず、Cipher のインスタンスを取得するためにアルゴリズム名のみを指定した場合、Android と Java が使用するデフォルト値は何ですか?
Android はデフォルトで CBC を使用しますか? IVのエラーは発生しません。メソッドでIV を指定init
し、Java プロジェクトでモードを指定しない場合、IV は ECB に使用できないため、例外がスローされます。
ありがとう。