узла код расслоение плотной:AES-128-ECB - Противоречивый результат шифрования узла JS и Java
function AES_encrypt(){
var bKey = new Buffer('24Qn9974h50D9DNi', 'utf-8');
var bInput = new Buffer(‘test’, 'utf-8');
console.log(bKey.length);
var cipher = crypto.createCipher('AES-128-ECB',bKey);
//cipher.setAutoPadding(auto_padding=false);
var crypted = cipher.update(bInput,null,'base64');
crypted+=cipher.final('base64');
console.log(crypted);
return crypted;
}
получить результат: 57b6b7oulw7eO5h7efZ9/ш ==
Java код:
основной Java:
String data = AES.encryptToBase64("test","24Qn9974h50D9DNi");
AES Java:
public static String encryptToBase64(String data, String key){
try {
byte[] valueByte = encrypt(data.getBytes("utf-8"), key.getBytes("utf-8");
return new String(Base64.encode(valueByte));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("encrypt fail!", e);
}
}
public static byte[] encrypt(byte[] data, byte[] key) {
if(key.length!=16){
throw new RuntimeException("Invalid AES key length (must be 16 bytes)");
}
try {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec seckey = new SecretKeySpec(enCodeFormat,"AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, seckey);// 初始化
byte[] result = cipher.doFinal(data);
return result; // 加密
} catch (Exception e){
throw new RuntimeException("encrypt fail!", e);
}
}
получить результат: wA1JU6VxMaVl8Ck8pBrX8A ==
фактически не смотреть на него много, но что-то нужно помнить, что узел автоматически подушечки ваши шифрования вещи для вас. http://nodejs.org/api/crypto.html#crypto_cipher_setautopadding_auto_padding_true – Epicblood
Спасибо за ваш ответ! java дополнение бит-узел не является, это моя одержимость – user3180646