我使用AES來加密和解密我的密碼。我試圖實現的是,我需要以cookie的形式在客戶端存儲加密的密碼,然後當客戶端再次登錄到我的網站時,我需要從客戶端獲得加密的密碼並進行解密它會根據客戶端提供的未加密密碼進行檢查。我面臨的問題是,在加密時,我使用BASE64.encodeString()在java中將加密密碼的字節數組轉換爲字符串,以便它可以傳遞給客戶端。但是當我從客戶端(即cookie)獲取相同的字符串並嘗試解密它時,它會給我填充錯誤,即javax.crypto.illegalBlockSizeException:使用填充密碼解密時,輸入長度必須是16的倍數。base64編碼js問題
爲什麼會發生?
代碼加密:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
byte[] plainBytes = Data.getBytes(UNICODE_FORMAT);
byte[] encrypted = cipher.doFinal(plainBytes);
String encryption = Base64.encodeBase64String(encrypted);
return encryption;
代碼解密:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
byte[] decryptval = Base64.decodeBase64(encryptedData);
byte[] decrypted = cipher.doFinal(decryptval);
return new String(decrypted);
快到錯誤,因爲我傳遞的加密字符串存儲在cookie中的JS ??。 JS使用base64編碼的字符串嗎?
如果黑客讀取base64字符串並連接到您的應用程序假裝是真正的用戶會怎麼樣? – DiogoSantana 2013-03-28 06:24:28
我爲每次運行的加密算法分配一個不同的標記..還有一個系列標識符是檢查是否存在違反安全性的問題。 – 2013-03-28 06:38:07