Я пытаюсь понять, как использовать AES CryptoJS для шифрования некоторых данных. Я сделал простую HTML-страницу с JavaScript, чтобы увидеть CryptoJS AES в действии.CryptoJS кодовая фраза, соль и iv не имеют значения?
Сначала я думал, что шифрование/дешифрование работает отлично. Но потом я попытался изменить кодовую фразу, соль и IV. Я узнал, что, учитывая одно и то же сообщение, полученный зашифрованный текст идентичен независимо от того, как я изменяю кодовую фразу, соль и IV.
Я скачал aes.js
и pbkdf2.js
от v3.1.2 из https://code.google.com/archive/p/crypto-js/downloads и называют https://github.com/mpetersen/aes-example
Вот мой HTML в целом (так как это очень простая страница Я думаю, что это нормально, чтобы разместить всю вещь)
<!DOCTYPE html>
<head>
<title>Decryptor</title>
</head>
<body>
<input type="text" id="inputElement" />
<button id="decrypt">Decrypt!</button>
<br />
<p id="ciphertext">
Ciphertext
</p>
<p id="plaintext">
Plaintext
</p>
</body>
<script src="aes.js"></script>
<script src="pbkdf2.js"></script>
<script type="text/javascript">
function decrypt() {
var input = document.getElementById("inputElement").value;
var ciphertextElement = document.getElementById("ciphertext");
var plaintextElement = document.getElementById("plaintext");
var message = input;
var passphrase = "myPassphrase";
var salt = "mySalt";
var iv = "myIV";
var key = CryptoJS.PBKDF2(
passphrase,
CryptoJS.enc.Hex.parse(salt),
{ keySize: this.keySize, iterations: this.iterationCount }
);
var parsedIV = CryptoJS.enc.Hex.parse(iv);
var encrypted = CryptoJS.AES.encrypt(
message,
key,
{ iv: parsedIV }
);
var ciphertext = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
ciphertextElement.innerHTML = ciphertext;
var cipherParams = CryptoJS.lib.CipherParams.create(
{ ciphertext: CryptoJS.enc.Base64.parse(ciphertext) }
);
var decrypted = CryptoJS.AES.decrypt(
cipherParams,
key,
{ iv: parsedIV }
);
var plaintext = decrypted.toString(CryptoJS.enc.Utf8);
plaintextElement.innerHTML = plaintext;
}
var decryptionButton = document.getElementById("decrypt");
decryptionButton.onclick = decrypt;
</script>
</html>
Любая помощь была бы принята с благодарностью!
'' myIV "' не hex, зачем разбирать его как таковой? что может привести к нулевому значению, которое всегда будет одинаковым ... – dandavis
dandavis верен, но реальная проблема заключается в том, что 'this.keySize' равно null. Таким образом, «ключ» всегда будет одинаковым независимо от параметров. Вы должны использовать ключевое слово 'new' для использования' this' –
Спасибо @dandavis и @ artjom-b! Я проанализировал соль и iv с помощью Utf8, а также изменил ключи и итерации, чтобы не использовать 'this'. Теперь, когда я меняю значения, зашифрованный текст также меняется! – hollaholl