【问题标题】:AES javascript encryption and Java decryptionAES javascript加密和Java解密
【发布时间】:2015-01-31 15:00:32
【问题描述】:

我已经在 javascrypt 中实现了 RSA 加密,在 java 中实现了 RSA 解密,这只是一个简单的过程。但问题是我必须一次性加密大量数据,而这对于 RSA 来说是不可能的,要么我必须拆分要加密的数据(这会使过程复杂化),要么使用 AES 和 RSA 加密和解密.所以我选择使用带有 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 方法中,我使用 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 中的 AES 加密和 Java 中的解密的示例,那将是非常受欢迎的。我通知它是带有 RSA 加密和解密的 AES,但它没有插入到当前代码中。如果我可以让 AES 部分正常工作,我可以通过加密 AEs 密钥来适当地执行 RSA。

【问题讨论】:

  • 那么,究竟是什么问题?你不明白为什么Object 会收到警报?
  • 不,它是对象,所以我不能直接通过 ajax 数据传递该对象 - 我也试过了。我无法弄清楚在 servlet 中获取相同加密数据的正确格式。

标签: java javascript encryption encoding cryptography


【解决方案1】:

您不能直接将encrypted 传递给后端,因为它是一个对象,其中包含密文和一些原生 CryptoJS 格式的其他重要数据。没有一些工作就没有简单的方法在 Java 中表示这个对象。

但是,您可以通过调用该对象上的toString() 函数来生成一个字符串。这会给你一个OpenSSL formatted 可以通过ajax 发送的字符串。虽然您当然可以在 Java 中解析此字符串以获得解密所需的信息,但直接将 ciphertextsalt 参数传递给后端可能更容易。

请参阅here 如何使用它们进行解密。请注意,saltpassword 不仅派生密钥,还派生 IV。

另一种可能性是通过利用 CryptoJS 和 Java 中的 PBKDF2 来使用更好的密码派生。有关这方面的一些示例,请参阅 here

【讨论】:

  • 我会尝试 PBKDF2,PBKDF2 也是我用来加密密码并将其存储在数据库中的算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
相关资源
最近更新 更多