AES javascript加密和Java解密
我已经在javascrypt中实现了RSA加密,在java中实现了RSA解密,这只是一个简单的过程。但问题是我必须加密大量数据,而RSA不可能一次加密大量数据,要么我必须拆分要加密的数据(这将使过程复杂化),要么使用AES对RSA进行加密和解密。所以我选择了使用带RSA加密和解密的AES 下面是我使用Crypto js的javascript代码AES javascript加密和Java解密,java,javascript,encryption,encoding,cryptography,Java,Javascript,Encryption,Encoding,Cryptography,我已经在javascrypt中实现了RSA加密,在java中实现了RSA解密,这只是一个简单的过程。但问题是我必须加密大量数据,而RSA不可能一次加密大量数据,要么我必须拆分要加密的数据(这将使过程复杂化),要么使用AES对RSA进行加密和解密。所以我选择了使用带RSA加密和解密的AES 下面是我使用Crypto js的javascript代码 <script src="rollups/aes.js"></script> <script src="component
<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>
在我发布的servlet方法中,我使用sysout检查接收到的数据是否相同。我得到的密码是一样的,编码数据也是一样的。问题是,在从加密到编码的转换过程中,编码数据在jsp本身中改变了其形式。我试图通过ajax直接传递“encrypted”,但这是一个指向错误,如果我输入“alert(typepof encrypted);”,它会以“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。您不能直接将
加密的
传递到后端,因为它是一个包含密文和一些本机CryptoJS格式的其他重要数据的对象。如果不做一些工作,用Java表示这个对象是不容易的
但是,您可以通过调用对象上的toString()
函数从该对象生成字符串。这将为您提供一个可以通过ajax发送的字符串。虽然您当然可以用Java解析这个字符串以获得解密它所需的信息,但是直接将密文
和salt
参数传递到后端可能会更容易
看看如何使用它们进行解密。请注意,salt
和password
不仅派生密钥,还派生IV
另一种可能是通过利用CryptoJS和Java中的PBKDF2来使用更好的密码派生。有关这方面的一些示例,请参见。那么,到底是什么问题?你不明白为什么会发出警报
Object
?不,它是Object,所以我不能通过ajax数据直接传递该对象-我也试过了。我无法找出在servlet中获得相同加密数据的正确格式。我将尝试PBKDF2,PBKDF2也是我用于加密密码并将其存储在数据库中的算法。
secretpasses: 23f96d28ae9f9c1c8c37050f79acdb37
encode: a7dHG/b4IMxeK7b9O00PATG+jgOy3HWZuoIeB2zbs2DvOFhrJUuOJ94bXly4cjuEd+YRa9V6jsMOY5SxmZAAQw==