У меня есть следующее: let original = 'something' let passphrase = uuidv4 () let encrypted = CryptoJS.AES.encrypt (original, passphrase) // Я хочу, чтобы эта часть занимала ≈ 10 минут * минимум * let ...
1 ответ
Не давайте ключ, дайте хеш ключа. Длина ключа к грубой силе даст вам требуемую степень детализации.
Процесс шифрования:
- Создайте ключ (например, hunter2) и зашифруйте свои данные с его помощью.
- Hash hunter2 с использованием такого алгоритма, как SHA1 (f3bbbd66a63d4bf1747940578ec3d0103530e21d)
- Сделайте клиентский перебор ключа
Чем длиннее ключ, тем экспоненциально больше времени потребуется, чтобы его найти, при этом размер полезной нагрузки остается постоянным.
Однако в этом есть недостаток - брутфорс не нужен, так как брутфорс для шифрования AES будет столь же простым делом. Этого можно избежать, сделав ключ также хешем.
Зашифруйте свои данные не с помощью "hunter2", а с помощью MD5(hunter2)
(используйте другой алгоритм).
Добавьте немного соли в хеши, чтобы предотвратить эффективное использование радужных таблиц.
Псевдокод:
// Encrypt
let key = "password";
let aesKey = md5(password);
let hint = sha1(password);
let encryptedData = data.encrypt(aesKey);
let decryptedData = data.decrypt(md5(bruteForceSha1(hint));
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.