java - 服务器(Java - Cipher)和客户端(Javascript - CryptoJS)之间的 AES

标签 java javascript client-server aes

我必须在 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 的概念,这对我来说很模糊)。

最佳答案

不要在浏览器JS中做加密;这是impossible安全地进行。

使用 SSL。其预期目的是加密浏览器和服务器之间的通信。

如果成本是你的问题,有free SSL certificates .

关于java - 服务器(Java - Cipher)和客户端(Javascript - CryptoJS)之间的 AES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027386/

相关文章:

Java 在 BigInteger 中存储字符串

c - 段错误: 11 Server/Client

java - 是否使用 System.identityHashCode(Obj) 可靠地返回唯一 ID

javascript - AngularJS ng-show(不随 bool 值改变)

javascript - Angular 2 : http - actual long polling

javascript - 渲染/包含 html 文件 Google Cloud Functions

c# - 通过Tcp/IP将客户端数据Queue发送到服务器端

c++ - 如何在一个程序中实现client-server udp multicast?

java - android编译找不到符号错误

Java/Android Edittext.gettext().toString 不工作