を働いていない私は、キーを使用して文字列を暗号化するために、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>
それから私はそれをサーバ側に送信し、
$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);
アイブなど、エンコーディングを変更六角デコードを変え、UTF8に変換しようとしたが、それは常にnonreadableキャラとして時々、ちんぷんかんぷんを出てくる:このPHPコードを解読しようとすると他の回は読めるがナンセンスである。
「mcrypt」は使用しないことをお勧めします。今のところ、ほぼ10年前から放棄されています。このため、PHP 7.2では非推奨となり、コアからPECLに削除されます。標準のPKCS#7(néePKCS#5)パディングはサポートされていません。バイナリデータでも使用できない非標準のヌルパディングのみがサポートされています。 'mcrypt'には、2003年にさかのぼる多くの傑出したバグ(https://sourceforge.net/p/mcrypt/bugs/)があります。代わりに、[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)を参照して、ペンギンまでスクロールしてください。 乱数IVを使用してCBCモードを使用し、暗号化されたデータにIVを使用して復号化に使用するだけで、秘密にする必要はありません。 – zaph
16進コード化された文字列から '0x'を削除する必要があります(実際は、16進数から16進数に切り替えようとしています)。 – LSerni