нужна расшифровка AES в JavaScript - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий код для расшифровки в Java, я хочу, чтобы он был реализован в angular4.

public synchronized InputStream getInputStream(String src) {
    KeyEntry entry = keysMap.get(src);
    try {
        String destPath = rootFolder + "/" + entry.destination;
        FileInputStream is = new FileInputStream(destPath);
        if (entry.key.isEmpty()) return is;
        byte[] encKey = Base64.decode(entry.key, Base64.DEFAULT);
        SecretKeySpec secretKeySpec = new SecretKeySpec(encKey, AES_ALGORITHM);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(encKey);
        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
        return new CipherInputStream(is, cipher);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

в настоящее время это делается, что-то вроде ниже, не работает

decryptContent(ciphertext, base64Key) {
    const key = CryptoJS.enc.Base64.parse(base64Key);

    const decryptedData = CryptoJS.AES.decrypt( ciphertext, key, {
        iv: CryptoJS.lib.WordArray.random(128 / 8),
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.NoPadding
    });

    const decryptedText = decryptedData.toString( CryptoJS.enc.Utf8 );    
}

1 Ответ

0 голосов
/ 13 декабря 2018

AES_TRANSFORMATION = "AES / CFB8 / NoPadding";

Затем вам необходимо использовать режим CFB для расшифровки

 mode: CryptoJS.mode.CFB

Я не понимаю, как получить IV в javascript, как в java, то естьгде меня больше всего поразило

IvParameterSpec ivParameterSpec = new IvParameterSpec(encKey);

В Java ключ шифрования также используется как IV.Для расшифровки данных вы должны использовать ключ как IV тоже.

Обратите внимание, что использование ключа, так как IV - это плохая практика, и это может привести к слабости безопасности.IV позволяет повторно использовать один и тот же ключ для нескольких шифрований, не создавая отверстия для «двукратной атаки с использованием клавиатуры».Если ключ используется повторно для нескольких шифрований, IV должен быть уникальным для каждого шифрования для одного и того же ключа.

...