【发布时间】:2016-08-10 09:22:43
【问题描述】:
我有一个用于AES加密和解密的Java算法,必须在JavaScript中实现解密。
public String encryptWithAES(String value, String key, String encoding) throws NoSuchAlgorithmException, NoSuchPaddingException, DecoderException, UnsupportedEncodingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] keyBytes = Hex.decodeHex(key.toLowerCase().toCharArray());
byte[] dataToSend = value.getBytes(encoding);
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(keyBytes, "AES");
c.init(1, k);
byte[] encryptedData = c.doFinal(dataToSend);
return new String(Hex.encodeHex(encryptedData));
}
public String decryptAES(String encrypted, String key, String encoding) throws NoSuchAlgorithmException, NoSuchPaddingException, DecoderException, UnsupportedEncodingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] keyBytes = Hex.decodeHex(key.toCharArray());
byte[] encryptedData = Hex.decodeHex(encrypted.toCharArray());
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(keyBytes, "AES");
c.init(2, k);
byte[] dencryptedData = c.doFinal(encryptedData);
return new String(dencryptedData, encoding);
}
我在网上找了很多例子,但没有人给我一个合适的结果。
现在我尝试使用该代码进行解密:
var algos = ['aes-128-cbc', 'aes-128-cfb', 'aes-128-cfb1', 'aes-128-cfb8', 'aes-128-ctr', 'aes-128-ecb', 'aes-128-gcm', 'aes-128-ofb', 'aes-128-xts', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb1', 'aes-256-cfb8', 'aes-256-ctr', 'aes-256-ecb', 'aes-256-gcm', 'aes-256-ofb', 'aes-256-xts', 'aes128', 'aes256'];
//var masterData - string like 'c07abe96dde490b3aba7d2f21a43ba94960619ff110ffb53433f0ff39f4cf138e48511b1fb4030'
//const ENCRYPTION_KEY - string like '94960619ff110ffb53433f0ff39f4cf1' with 32 symbols
function decrypt(text, algorithm) {
var decipher = crypto.createDecipher(algorithm, ENCRYPTION_KEY);
var dec = decipher.update(text, 'hex', 'utf8');
dec += decipher.final('utf8');
return dec;
}
algos.map(algo => {
try {
const dec = decrypt(masterData, algo);
console.log(algo, dec);
} catch (error) {
console.log(algo, 'error', error);
}
});
编码后的字符串是 JSON。
【问题讨论】:
-
你在谈论一个 Maven 算法..你是什么意思? Maven 是一个工具,一个算法是基于 Java 的?
-
是的。只是算法来自 maven lib:grepcode.com/file/repo1.maven.org/maven2/…
标签: javascript java node.js encryption aes