Maison > Questions et réponses > le corps du texte
P粉0142181242023-08-31 10:27:11
Fonction build3DesKey()
将一个太短的3DES密钥扩展到24个字节,通过在末尾填充0x00值,对于太长的密钥,末尾会被简单地截断。在PHP中,可以如下实现 build3DesKey()
:
$key = substr(str_pad($key, 24, "$key = "12345"; $ciphertext = "84b24172c57752385251d142abadbed1d9945301a3aee429ce00c1e291a605c30ad18c5e00007f6db394fc6138a2ee4c"; $key = substr(str_pad($key, 24, "rrreee"), 0, 24); $plaintext = openssl_decrypt(hex2bin($ciphertext), "des-ede3", $key, OPENSSL_RAW_DATA); print($plaintext. PHP_EOL); // The quick brown fox jumps over the lazy dog"), 0, 24);
Malgré le manque de fonctions str2ByteArray()
,但其功能可以推断出来。由于在您的示例中,密文是十六进制编码的,所以这个函数似乎只是执行十六进制解码。在PHP中,与 str2ByteArray()
相对应的是 hex2bin()
.
Une implémentation possible du décryptage est donc (en utilisant PHP/OpenSSL) :
rrreeeCes données d'entrée renvoient le même texte brut en code Java !
Différence par rapport à votre code :
Votre code utilise le mcrypt
obsolète. Pour des raisons de sécurité, il ne faut pas l'utiliser maintenant. Une meilleure alternative est PHP/OpenSSL, comme indiqué dans le code ci-dessus. De plus, la dérivation de clé implémentée est erronée, par exemple elle applique le résumé MD5, qui n'est pas du tout utilisé dans le code Java.
Sécurité :
Bien qu'il s'agisse peut-être d'une ancienne application, quelques remarques sur la sécurité :
build3DesKey()
n'est pas sécurisée. Si le matériel de clé est une chaîne, il ne s’agit généralement pas d’une clé mais d’un mot de passe. Par conséquent, une fonction de dérivation de clé fiable telle que Argon2 ou PBKDF2 doit être utilisée.