2016-10-01 17 views
4

私はクライアントとの私の通信を暗号化するには、次の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 
+0

http://stackoverflow.com/questions/23241257/bad-base-64-error – USKMobility

+0

@USKMobilityは、URL_SAFEだけを使用して試してみましたが、今は示唆された答えを試しても動作しませんでした。 – Keddy1201

+0

base64以外の文字を持つ入力文字列を調べようとします – USKMobility

答えて

1

あなたが使用する必要があることも可能である:

Base64.decode(input,Base64.NO_WRAP|Base64.URL_SAFE) 

あなたがあまりにもフラグの異なるコンボを必要とすることも可能です。

また、base64文字列の取得方法も異なります。場合によっては、URLや他のオンラインソースから転送された場合、 '+'は ''(スペース)に変換されることがあります。

+0

私はまだ悪いbase64、私はPHPスクリプトで暗号化している文字列は、それは変化しないjavascriptを含む文字列の定数です。 – Keddy1201

+0

base64文字列を見ることなく、またはbase64文字列をどのように転送しているか正確に知ることなく、私は推測できます。私はこれがあなたが共有したいものではないかもしれないと推測していますが、多分エラーを生成して共有できるテストケースを行うことができます。 – Tigger

+0

私は通常のbase64文字列に不正な文字がないので意味がありません。 – Keddy1201