簡體   English   中英

AES javascript加密和Java解密

[英]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中解析此字符串以獲取解密它的必要信息,但是將ciphertextsalt參數直接傳遞給后端可能更容易。

請參閱此處如何使用它們進行解密。 請注意, saltpassword不僅導出密鑰,還導致IV。

另一種可能性是通過利用CryptoJS和Java中的PBKDF2來使用更好的密碼派生。 請看這里的一些例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM