我必须在 JS 中制作一个应用程序,它使用 AES 对消息进行编码并通过 AJAX 将其传递到服务器。然后服务器使用 Java 解码消息。
我的问题是:如何在 JS 中加密消息并能够使用 AES 在 Java 中解密?知道java和js之间的通信已经通过webservices建立起来了
客户端,我使用 Crypto JS 库 ( http://code.google.com/p/crypto-js/ )。服务器端我用的是Java自带的Cipher类(我用的是Java Play框架,这里没关系)。
我对密码学完全陌生。我整天都在研究,但仍然无法完成这项工作。
问题是用于加密和解密消息的 key 必须相同,我不知道该怎么做。
根据我的搜索,我知道有不同的模式可以使用 AES。默认情况下,Java 使用 ECB,而 CryptoJS 使用 CBC,这是一个问题,但通过告诉 CryptoJS 也使用 ECB 模式,似乎不难解决。但是接下来有一个填充问题,似乎 Java 和 CryptoJS 中唯一可用的填充根本就没有填充。但是当我在 Java 中使用 NoPadding 时出现异常。
但即使我设法解决了这个问题,最大的问题是 CryptoJS 生成的 key 和 Java 生成的 key 不一样。如果我用 Java 加密一条消息,结果总是一样的,都是十六进制的。但是在 crypto JS 中它是 Base64 并且它永远不一样......
我知道这是由 key 生成引起的,这在 Java 和 CryptoJS 中是不同的(然后输入 IV 和 Salt 的概念,这对我来说很模糊)。
最佳答案
关于java - 服务器(Java - Cipher)和客户端(Javascript - CryptoJS)之间的 AES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027386/