0


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 に使用できないため、例外がスローされます。

ありがとう。

4

1 に答える 1

0

Android と Java の両方のデフォルトは"AES/ECB/PKCS5Padding"です。キーと IV の両方が正しいサイズではなく (したがって、コードは実行されないはずです!)、(文字) エンコード/デコードを正しく実行するのを忘れています。特に、印刷できない文字はドロップまたは変換される可能性が高いため、暗号文を文字列に直接変換しないでください。

于 2013-01-05T01:10:55.877 に答える