2009-04-21 74 views
0

我必須在php中創建一個握手頁面,該頁面將採用爲Java/JSP中的函數加密的查詢字符串,並在應用程序中使用PHP進行解密。在JSP中加密Sting ...在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不需要保密,但不像鑰匙。

分組密碼對固定大小的明文塊進行操作。如果您沒有足夠的明文輸入,則必須填充以便接收者可以區分填充和數據。鏈接的例子完全忽略了這一點,這是一個錯誤。如果使用CipherOutputStream,則部分最終塊將從密文中靜默截斷。如果直接使用Cipher對象,則部分塊將導致doFinal方法引發異常。相反,使用類似PKCS5Padding的東西。

一個適當的Java的例子是這樣的:

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(); 

哪裏JSP接收明文進行加密?您希望JSP如何格式化其輸出(包括IV)?

+0

我可以用我的jsp代碼:O? – 2013-06-22 08:38:51