У меня есть следующий код JavaScript, чтобы зашифровать строку с помощью ключа:PHP и JS Mcrypt дешифрования не работает
des.js это: http://www.tero.co.uk/des/code.php
<script src="/js/des.js"></script>
<script>
var key = '12345678';
var message = 'hello world';
var ciph = des(key, message, 1, 0);
ciph = stringToHex(ciph);
console.log("Encrypted Result: " + ciph);
</script>
Затем я отправить его на стороне сервера и попытка расшифровать этот PHP код:
$key = '12345678';
$hexa = '0x28dba02eb5f6dd476042daebfa59687a'; /This is the output from Javascript
$string = '';
for ($i=0; $i < strlen($hexa)-1; $i+=2) {
$string .= chr(hexdec($hexa[$i].$hexa[$i+1])); }
echo mcrypt_decrypt(MCRYPT_DES, $key, $string, MCRYPT_MODE_ECB);
Ive пытался преобразовать его в utf8, изменение кодировки, изменение шестигранного декодирования и т.д., но она всегда выходит бред, иногда nonreadable чары в других случаях, как читаемый, но вздор.
Лучше не использовать 'mcrypt', он оставался без изменений уже почти десять лет. Поэтому он устарел и будет удален из ядра и в PECL в PHP 7.2. Он не поддерживает стандартное дополнение PKCS # 7 (née PKCS # 5), только нестандартное нулевое заполнение, которое нельзя даже использовать с двоичными данными. 'mcrypt' имеет много выдающихся [ошибок] (https://sourceforge.net/p/mcrypt/bugs/), относящихся к 2003 году. Вместо этого используйте [defuse] (https://github.com/defuse/php-encryption) или [RNCryptor] (https://github.com/RNCryptor), они обеспечивают полное решение, поддерживаются и верны. – zaph
Не используйте DES, он не защищен и был превзойден AES. Не используйте режим ECB, он небезопасен, см. [Режим ECB] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29), прокрутите вниз до пингвина. Вместо этого используйте режим CBC со случайным IV, просто префикс зашифрованных данных с помощью IV для использования в расшифровке, он не обязательно должен быть секретным. – zaph
Вам нужно удалить «0x» из шестнадцатеричной кодированной строки (на самом деле, я бы попытался полностью переключиться с hex на base64). – LSerni