首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES javascript加密和Java解密

AES javascript加密和Java解密
EN

Stack Overflow用户
提问于 2015-01-31 15:00:32
回答 1查看 6.9K关注 0票数 3

我已经在javascrypt中实现了RSA加密,在java中实现了RSA解密,这只是一个简单的过程。但是问题是我必须对大量的数据进行加密,这对于RSA来说是一次不可能的,要么我必须拆分要加密的数据(这会使过程复杂化),要么使用AES对RSA加密和解密。所以我选择用RSA加密和解密的AES。

以下是我使用Crypto-js的javascript代码

代码语言: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中的输出

代码语言:javascript
复制
encrypted: U2FsdGVkX192e9xprFPyuWu3Rxv2+CDMXiu2/TtNDwExvo4Dstx1mbqCHgds27Ng7zhYayVLjifeG15cuHI7hHfmEWvVeo7DDmOUsZmQAEM=
secretPasses: 23f96d28ae9f9c1c8c37050f79acdb37
encode: a7dHG/b4IMxeK7b9O00PATG+jgOy3HWZuoIeB2zbs2DvOFhrJUuOJ94bXly4cjuEd+YRa9V6jsMOY5SxmZAAQw==

在servlet的post方法中,我使用sysout检查接收到的数据是否相同。我得到的秘密传递是一样的,编码的数据也是一样的。问题是,在从加密到编码的转换过程中,编码数据改变了jsp本身的形式。我试图通过ajax直接传递“加密”,但这是指向错误,如果我输入“警报(加密的类型)”,它会以"Object“的形式发出警报。如何将原始加密数据传递给servlet?

代码语言:javascript
复制
System.out.println("secretpasses: "+request.getParameter("secretPasses"));
System.out.println("encode: "+request.getParameter("encode"));

用Java输出:

代码语言:javascript
复制
secretpasses: 23f96d28ae9f9c1c8c37050f79acdb37
encode: a7dHG/b4IMxeK7b9O00PATG+jgOy3HWZuoIeB2zbs2DvOFhrJUuOJ94bXly4cjuEd+YRa9V6jsMOY5SxmZAAQw==

另外,如果我能得到一些示例,说明Javascript中的AES加密和Java中的解密,也是值得欢迎的。我通知它是带有RSA加密和解密的AES,但是它没有插入到当前的代码中。如果我能让AES部分工作,我可以通过加密AEs密钥来适当地执行RSA。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-31 15:31:12

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

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

请参见这里如何使用它们进行解密。请注意,saltpassword不仅派生密钥,而且还派生IV。

另一种可能是通过在PBKDF2和CryptoJS中使用更好的密码派生。有关这方面的一些示例,请参见这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28252990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档