2014-01-10 5 views
0

узла код расслоение плотной: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 ==

+0

фактически не смотреть на него много, но что-то нужно помнить, что узел автоматически подушечки ваши шифрования вещи для вас. http://nodejs.org/api/crypto.html#crypto_cipher_setautopadding_auto_padding_true – Epicblood

+0

Спасибо за ваш ответ! java дополнение бит-узел не является, это моя одержимость – user3180646

ответ

0

Вам нужно раздуть Строка "test" до 16 байт. Я считаю, что Java использует по умолчанию PKCS (но есть и другие схемы дополнений).

String data = AES.encryptToBase64("test","24Qn9974h50D9DNi"); 
+0

Спасибо за ваш ответ, мне нужно получить результат шифрования java как цель достижения с помощью узла js, есть другие способы? – user3180646

Смежные вопросы