在java中encryption,在node.js中解密

我需要在Java中进行encryption,并使用node.js进行解密。 解密结果已损坏。

这里是java代码:

public String encrypt(SecretKey key, String message){ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] stringBytes = message.getBytes("UTF8"); byte[] raw = cipher.doFinal(stringBytes); // converts to base64 for easier display. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } 

这里是node.js代码:

  AEse3SCrypt.decrypt = function(cryptkey, encryptdata) { encryptdata = new Buffer(encryptdata, 'base64').toString('binary'); var decipher = crypto.createDecipher('aes-128-cbc', cryptkey); decipher.setAutoPadding(false); var decoded = decipher.update(encryptdata); decoded += decipher.final(); return decoded; } As a key I use: "[B@4ec6948c" The jave encrypted result is: "dfGiiHZi8wYBnDetNhneBw=="<br> The node.js result is garbich.... 
  1. 在Java中我使用“PKCS5Padding”。 在node.js中应该做什么关于填充? 我做了setAutoPadding(false)。 如果我不这样做,我会得到错误解码失败。 (仅从node.js版本0.8)。
  2. 我试图从java中删除utf8编码,以便与node.js互补,但是它不起作用。 任何想法是什么错误?

作为一个关键我使用:“[B @ 4ec6948c”

这听起来很像你只是在字节数组上调用toString() 。 这不是给你在字节数组内的数据 – 它只是Object.toString()的默认实现,在字节数组上调用。

尝试使用Arrays.toString(key)打印出键。

如果你在node.js代码中使用了这个破解的键值,那么怪怪的是它给你回来了。

我试图从java中删除utf8编码,以便与node.js互补

这绝对是错误的方法。 相反,您应该弄清楚如何使node.js代码将明文数据解释为UTF-8编码的文本。 从根本上来说,string是字符数据,而encryption则是对二进制数据进行操作 – 您需要一种弥合差距的方式,UTF-8是完全合理的方式。 node.js中解密的初始结果应该是二进制数据,然后通过UTF-8“解码”为文本。

我担心填补方面对此不甚了解。