![](/img/trans.png)
[英]AES Encryption in Java working, but Decryption in JavaScript not working?
[英]AES javascript encryption and Java decryption
我已經在javascrypt中實現了RSA加密,在java中實現了RSA解密,這只是一個簡單的過程。 但是我要加密大量數據的問題,這是RSA一次性無法實現的,要么我必須分割要加密的數據(這會使過程復雜化),要么使用帶RSA加密和解密的AES 。 所以我選擇使用RSA加密和解密的AES。
這是我使用Crypto-js的javascript代碼
<script src="rollups/aes.js"></script>
<script src="components/enc-base64-min.js"></script>
<script type="text/javascript" src="rollups/jquery-min.js"></script>
<script type="text/javascript">
var secretPass = CryptoJS.lib.WordArray.random(16);
var message = "<username>user</username><password>password</password>";
var encrypted = CryptoJS.AES.encrypt(message, CryptoJS.enc.Hex.stringify(secretPass));
var encode = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var secretPasses = CryptoJS.enc.Hex.stringify(secretPass);
console.log('encrypted: ',encrypted);
console.log('secretPasses: ',secretPasses);
console.log('encode: ',encode);
$.ajax({
url: 'encryption',
type: 'POST',
data: {
encode: encode,
secretPasses: secretPasses
},
success: function(data) {
console.log('success');
},
failure: function(data) {
console.log('failure');
}
});
</script>
在Jsp中輸出
encrypted: U2FsdGVkX192e9xprFPyuWu3Rxv2+CDMXiu2/TtNDwExvo4Dstx1mbqCHgds27Ng7zhYayVLjifeG15cuHI7hHfmEWvVeo7DDmOUsZmQAEM=
secretPasses: 23f96d28ae9f9c1c8c37050f79acdb37
encode: a7dHG/b4IMxeK7b9O00PATG+jgOy3HWZuoIeB2zbs2DvOFhrJUuOJ94bXly4cjuEd+YRa9V6jsMOY5SxmZAAQw==
在我的servlet的post方法中,我使用sysout檢查接收的數據是否相同。 我得到的秘密通道是相同的,編碼數據也是一樣的。 問題是,編碼數據在執行從加密到編碼的轉換時在jsp本身中改變了它的形式。 我試圖直接通過ajax傳遞“加密”,但它指向錯誤,如果我把“alert(typepof encrypted);”,它警告為“對象”。 如何將原始加密數據傳遞給servlet?
System.out.println("secretpasses: "+request.getParameter("secretPasses"));
System.out.println("encode: "+request.getParameter("encode"));
Java輸出:
secretpasses: 23f96d28ae9f9c1c8c37050f79acdb37
encode: a7dHG/b4IMxeK7b9O00PATG+jgOy3HWZuoIeB2zbs2DvOFhrJUuOJ94bXly4cjuEd+YRa9V6jsMOY5SxmZAAQw==
如果我能在Javascript和Java解密中獲得一些AES加密示例,也會受到歡迎。 我通知它是帶有RSA加密和解密的AES,但它沒有插入到當前代碼中。 如果我可以使AES部件工作,我可以通過加密AEs密鑰來適當地進行RSA。
您無法直接將encrypted
傳遞到后端,因為它是一個包含密文和本機CryptoJS格式的其他重要數據的對象。 如果沒有一些工作,沒有簡單的方法在Java中表示這個對象。
但是,您可以通過調用其上的toString()
函數從該對象生成一個字符串。 這將為您提供一個OpenSSL格式的字符串,可以通過ajax發送。 雖然您當然可以在Java中解析此字符串以獲取解密它的必要信息,但是將ciphertext
和salt
參數直接傳遞給后端可能更容易。
請參閱此處如何使用它們進行解密。 請注意, salt
和password
不僅導出密鑰,還導致IV。
另一種可能性是通過利用CryptoJS和Java中的PBKDF2來使用更好的密碼派生。 請看這里的一些例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.