私はクライアントとの私の通信を暗号化するには、次のPHPルーチンを持っている:PHPとJavaの暗号化と復号化ルーチン
public static function encrypt($input, $key) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = AES::pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
とサーバとの私の通信の暗号化を解除するには、次のJava rotuine:
public static String decrypt(String input, String key) {
byte[] output = null;
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decode(input,Base64.NO_WRAP));
} catch (Exception e) {
System.out.println(e.toString());
}
return new String(output);
}
次の復号化ルーチンが例外をスローするのはなぜですか?
java.lang.IllegalArgumentExceptionが:悪いベース64
編集:コードに文字列をハードコーディングした後、私はBadPaddingExceptionを取得しています。
機能を解読するために、私の入力:
wrmRa2hAoseNOev6/ascapxkLQRGX/GW3DQm3ETwBH7gJm1NetkgGFzgY4kZTE10Tv45YIcy/xoodq/GumSY5hsao1s4bkuKXZeim/IDTVr3elrqX13b81/XE5iB3iJrAqny2dQ5SsWso0lUcAZGS2Wls/lTeQiIKXEaOh7iZZ3xOtM6633iNcoiFxEnX5A0dMrdRNEOkmQ3UnQmuIGTSv0RLKuPv5r5dplGZ3N2LMMpoB0AMu3DSXFEdiD4XN49
http://stackoverflow.com/questions/23241257/bad-base-64-error – USKMobility
@USKMobilityは、URL_SAFEだけを使用して試してみましたが、今は示唆された答えを試しても動作しませんでした。 – Keddy1201
base64以外の文字を持つ入力文字列を調べようとします – USKMobility