2

base64 でエンコードされ、AES 128 ビットで暗号化された文字列を PHP から読み込もうとしていますが、IllegalBlockSizeException が発生します。

PHP 暗号化:

encrypt("My f awesome test !");

function encrypt($string){
    $td = mcrypt_module_open('rijndael-128', '', 'cbc', "1cc251f602cf49f2");

    mcrypt_generic_init($td, "f931c96c4a4e7e47", "1cc251f602cf49f2");
    $enc = mcrypt_generic($td, $string);

    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    return base64_encode($enc);
}

戻り値は次のとおりです。

McBeY73GQ5fawxIunVKpqUupipeRlt9ntyMRzjbPfTI=

今、私はJavaでそれを読みたい:

static public String decrypt(String data) throws Exception {
   data = new String( Base64.decode(data, Base64.NO_WRAP) );

   byte[] keyByte = "f931c96c4a4e7e47".getBytes("UTF-8");
   byte[] ivByte = "1cc251f602cf49f2".getBytes("UTF-8");

   Key key = new SecretKeySpec(keyByte, "AES");
   IvParameterSpec iv = new IvParameterSpec(ivByte);
   Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
   c.init(Cipher.DECRYPT_MODE, key, iv);
   byte[] bval = c.doFinal( data.getBytes("UTF-8") );

   return new String( bval );
}

そして、私は例外を取得しています:

javax.crypto.IllegalBlockSizeException: データがブロックサイズで整列されていません

これはパディングが原因である可能性がありますか?

編集

ここに画像の説明を入力

4

3 に答える 3

3

あなたのエラーは、平文と文字列との間の変換が原因でした。とにかく必要ではありません-バイト配列を使用するだけです:

byte[] data = Base64
    .decodeBase64("McBeY73GQ5fawxIunVKpqUupipeRlt9ntyMRzjbPfTI=");
byte[] keyByte = "f931c96c4a4e7e47".getBytes("UTF-8");
byte[] ivByte = "1cc251f602cf49f2".getBytes("UTF-8");

Key key = new SecretKeySpec(keyByte, "AES");
IvParameterSpec iv = new IvParameterSpec(ivByte);
Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
c.init(Cipher.DECRYPT_MODE, key, iv);
byte[] bval = c.doFinal(data);

System.out.println(new String(bval)); // Prints My f awesome test !

暗号化にパディングを使用することをお勧めします。そうしないと、任意のサイズの入力に対応できません。

于 2013-02-17T14:27:22.147 に答える
1

次の場合に doFinal() の呼び出し時に IllegalBlockSizeException がスローされます。または、この暗号化アルゴリズムが提供された入力データを処理できない場合。」- http://docs.oracle.com/javase/6/docs/api/javax/crypto/Cipher.html#doFinal%28%29 . したがって、入力データまたはブロックサイズが正しくありません。

于 2013-02-17T11:43:37.747 に答える