2009-04-21 21 views
0

Java/JSPで関数用に暗号化されたクエリー文字列を取り、アプリケーションでPHPを使用する際に解読するハンドシェイクページをPHPで作成する必要があります。JSPでスティッキングを暗号化するPHPで復号する

これは良い開始点http://propaso.com/blog/?cat=6であることが判明しましたが、PHPで暗号化され、PHPで復号化されます。

誰でもPHP/JSPで共通の暗号を使用することができます。それはCBCが答えているようだ上のリンクからは、以下のコード:

PHP暗号/モード:

$cipher  = "rijndael-128"; 
$mode  = "cbc"; 

とJSP暗号:

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); 

誰でも助けるために良いリンクを知っています私はこのプロセスを逆にしてJSPで暗号化し、PHPで解読します。

おかげ

答えて

2

あなたは与えられたメッセージのために予測できないIVを持っている必要があります答えを見つけました。 IVをハードコーディングすると、予測可能になります。ですから、暗号文をIVに渡すために何らかの方法を工夫する必要があります。 IVとは異なり、IVは秘密にする必要はありません。

ブロック暗号は、固定サイズの平文ブロックで動作します。入力するのに十分な平文がない場合は、受信者がパディングとデータを区別できるようにパディングする必要があります。リンクされた例はこれを完全に無視し、それはエラーです。 CipherOutputStreamが使用されている場合、部分的な最終ブロックは暗号文からサイレントに切り捨てられます。 Cipherオブジェクトが直接使用される場合、部分ブロックはdoFinalメソッドで例外を発生させます。代わりに、PKCS5Paddingのようなものを使用してください。 JSPが暗号化される平文を受信して​​いる

SecretKey secret = new SecretKeySpec(key, "AES"); 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
cipher.init(Cipher.ENCRYPT_MODE, secret); 
AlgorithmParameters param = cipher.getParameters(); 
/* In addition to ciphertext in "cos", recipient needs IV. */ 
byte[] iv = param.getParameterSpec(IvParameterSpec.class).getIV(); 
CipherOutputStream cos = new CipherOutputStream(output, cipher); 
byte[] buf = new byte[2048]; 
while (true) { 
    int n = input.read(buf, 0, buf.length); 
    if (n < 0) 
    break; 
    cos.write(buf, 0, n); 
} 
cos.flush(); 

適切なJavaの例では、このようなものでしょうか? JSPで出力をフォーマットするにはどうすればよいですか?

+0

これを私のjspコードで使うことができますか? –

関連する問題