【发布时间】:2015-10-19 21:06:44
【问题描述】:
我正在尝试使用谷歌的https://code.google.com/p/crypto-js/#AES 在 JavaScript 中加密某些内容,就像示例一样。问题是我试图在Java中解密它的结果是不同的。我能看到的唯一区别是填充(CryptoJs 使用 Pkcs7,而 java 使用 Pkcs5)在读了一点之后我意识到 Pkcs7 和 Pkcs5 基本相同。
这是我在 Javascript 中进行加密的代码示例:
var crypto = require('./aes.js');
var login = 'ABCD';
var key = crypto.CryptoJS.enc.Hex.parse('0123456789012345');
var ive = crypto.CryptoJS.enc.Hex.parse('0123456789012345');
var encrypted = crypto.CryptoJS.AES.encrypt(login, key, {iv: ive});
console.log('encrypted msg = ' + encrypted)
这是我在 Java 中用来解密的代码:
public String decrypt(byte[] cipherText) throws Exception {
String psk = "0123456789012345";
String iv = "0123456789012345";
try {
String encryptionKey = psk;
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
final SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes(UTF8), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv.getBytes(UTF8)));
return new String(cipher.doFinal(cipherText), UTF8);
} catch (BadPaddingException | IllegalBlockSizeException | UnsupportedEncodingException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException ex) {
LOG.log(Level.SEVERE, ex.getMessage(), ex);
throw new Exception(ex.getMessage());
}
}
你知道为什么它会失败吗?它是一种不同的算法还是我在其他地方失败了?
【问题讨论】:
标签: javascript java encryption aes cryptojs