Я использую CryptoJS для шифрования строки:
function doHash(msg){ msg = String(msg); var passphrase = 'aggourakia'; var hash = CryptoJS.AES.encrypt(msg, passphrase); var ciphertext= hash.ciphertext.toString(); //return ciphertext instead of object return ciphertext; }
Насколько я понимаю, CryptoJS использует кодовую фразу для генерации ключа , который затем используется для шифрования данных.
Однако я хотел бы расшифровать шифр с помощью функции PHP или, может быть, онлайнового инструмента, такого как: http://aesencryption.net/
Проблема в том, что они ожидают ключевой , а не кодовой фразы.
Как я могу напрямую предоставить ключ для CryptoJS AES, который я могу использовать на стороне сервера или любой онлайн-инструмент для дешифрования?
Дело в том, что мне уже очень сложно найти функции PHP, чтобы расшифровать шифры AES уже, и эта ключевая фраза / ключевая вещь добавляет сложности
Если вы хотите напрямую поставить ключ, вы также должны поставить IV . IV (вектор инициализации) необходим, поэтому он может быть XOR'ed с 1-м блоком сообщения. Тогда зашифрованный текст первого блока XOR'ed со вторым блоком сообщения и так далее. Это называется цепочкой шифрования (CBC) .
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
Это из документов CryptoJS https://code.google.com/p/crypto-js/#Custom_Key_and_IV
Вы можете генерировать ключи и IV с помощью PBKDF2, как писал @Narf. https://code.google.com/p/crypto-js/#PBKDF2
О PHP: mcrypt имеет шифр MCRYPT_RIJNDAEL_128, который является AES 128. MCRYPT_RIJNDAEL_192 и MCRYPT_RIJNDAEL_256 несовместимы с AES 192 и AES 256, поскольку AES использует 128-битный блок со всеми размерами ключей. Rijndael имеет настраиваемый размер блока. CryptoJS будет использовать 128-битную AES, если вы поставите 128-битный ключ, он будет использовать 256 бит, если вы используете функцию, которая принимает кодовую фразу.