Зашифруйте с помощью модуля Node.js Crypto и расшифруйте с помощью Java (в приложении для Android)

Ищу способ зашифровать данные (в основном строки) в узле и расшифровать в приложении для Android (Джава).

Успешно сделали это в каждом из них (зашифровать / расшифровать в узле и зашифровать / расшифровать в java), но, похоже, не удается заставить это работать между ними.

Возможно, я не шифрую / дешифрую одним и тем же способом, но каждая библиотека на каждом языке имеет разные имена для одних и тех же вещей ...

Любая помощь приветствуется.

вот код: Node.js

var crypto = require('crypto')
var cipher = crypto.createCipher('aes-128-cbc','somepass')
var text = "uncle had a little farm"
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex')
//now crypted contains the hex representation of the ciphertext

и java

private static String decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec );
    byte[] decrypted = cipher.doFinal(encrypted);
    return new String(decrypted);
}

необработанный ключ создается так

private static byte[] getRawKey(String seed) throws Exception {
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    byte[] seedBytes = seed.getBytes()
    sr.setSeed(seedBytes);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}

, а зашифрованная шестнадцатеричная строка преобразуется в байты, как это

public static byte[] toByte(String hexString) {
    int len = hexString.length()/2;
    byte[] result = new byte[len];
    for (int i = 0; i < len; i++)
        result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
    return result;
}
14
задан Shh 16 October 2011 в 23:30
поделиться