Здравствуйте, подскажите пожалуйста, как правильно шифровать и дешифровать данные с помощью библиотеки CryptoJs?
Сейчас я пришёл к вот такому варианту:
const key = CryptoJS.lib.WordArray.random(256).toString()
// Шифрование сообщения
function encryptMessage(message) {
var iv = CryptoJS.lib.WordArray.random(256)
var encrypted = CryptoJS.AES.encrypt(message, key, { iv: iv });
return encrypted.toString()
}
// Дешифрование сообщения
function decryptMessage(encrypted) {
const decrypted = CryptoJS.AES.decrypt(encrypted, key)
return decrypted.toString(CryptoJS.enc.Utf8)
}
И меня появился вопрос, что если я буду использовать ключ, больше 256 бит, например 1024, алгоритм его примет, или возьмёт только первые 254 бита?
И iv всегда рандомные создавать, для дешифровки они не нужны?
И стоит ли использовать дополнительно PBKDF2:
const key = CryptoJS.lib.WordArray.random(256).toString()
function encryptMessage(message) {
var salt = CryptoJS.lib.WordArray.random(32)
var iv = CryptoJS.lib.WordArray.random(256)
var newKey = CryptoJS.PBKDF2(key, salt, { keySize: 256, iterations: 10 })
var encrypted = CryptoJS.AES.encrypt(message, newKey, { iv: iv });
return encrypted.toString()
}
Как я понял, это поможет небольшой пароль (10 бит), преобразовать в 256 битный ключ.
И при использовании рандомной соли, не получается дешифровать данные, почему так?
Спасибо!