我已经在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的post方法中,我使用sysout检查接收到的数据是否相同。我得到的秘密传递是一样的,编码的数据也是一样的。问题是,在从加密到编码的转换过程中,编码数据改变了jsp本身的形式。我试图通过ajax直接传递“加密”,但这是指向错误,如果我输入“警报(加密的类型)”,它会以"Object“的形式发出警报。如何将原始加密数据传递给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。
发布于 2015-01-31 15:31:12
您不能直接将encrypted传递给后端,因为它是一个包含密文和一些本机CryptoJS格式的其他重要数据的对象。如果不做一些工作,就没有一种简单的方法可以在Java中表示这个对象。
但是,您可以通过调用对象上的toString()函数从该对象生成一个字符串。这将给您一个可以通过ajax发送的OpenSSL格式字符串。当然,您可以在Java中解析这个字符串以获得解密它所需的信息,但直接将ciphertext和salt参数传递到后端可能更容易。
请参见这里如何使用它们进行解密。请注意,salt和password不仅派生密钥,而且还派生IV。
另一种可能是通过在PBKDF2和CryptoJS中使用更好的密码派生。有关这方面的一些示例,请参见这里。
https://stackoverflow.com/questions/28252990
复制相似问题