我在PHP中有这个TRIPLE DES ENCRYPTION CODE
$encryption_key = "CE51E06875F7D964";
$data='tokenNo=test&securityCode=111' ;
echo $desEncryptedData = encryptText_3des($data, $encryption_key);//outputs 3des encrypted data
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x&#61;0;$x<8;$x&#43;&#43;) {
$key &#61; $key.substr($key, $x, 1);
}
$padded &#61; pkcs5_pad($plainText,
mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted &#61; base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize)
{
$pad &#61; $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
我能够将数据加密为xcFEvIdLXc2fjhG1i4iPOQu5L6ahxwZVucDOPqeMM2E &#61;
现在我有了密钥,我能将这些数据解密为纯文本格式吗&#xff1f;
我试过这种方式
$encryption_key &#61; "CE51E06875F7D964";
$data&#61;&#39;xcFEvIdLXc2fjhG1i4iPOQu5L6ahxwZVucDOPqeMM2E&#61;&#39; ; //encrypted data
echo $desEncryptedData &#61; encryptText_3des($data, $encryption_key);//outputs 3des encrypted data
function encryptText_3des($plainText, $key) {
$key &#61; hash("md5", $key, TRUE);
for ($x&#61;0;$x<8;$x&#43;&#43;) {
$key &#61; $key.substr($key, $x, 1);
}
$padded &#61; pkcs5_unpad($plainText,
mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted &#61; base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_unpad($text)
{
$pad &#61; ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) !&#61; $pad) return false;
return substr($text, 0, -1 * $pad);
}
但我无法做到.我正在做的事情是错的&#xff1f;请建议我解密这个问题&#xff1f;加密密钥本身是用来解密三重DES中的数据吗&#xff1f;请帮忙
解决方法:
这是解决方案&#xff1a;
public function encrypt($data, $secret)
{
//Generate a key from a hash
$key &#61; md5(utf8_encode($secret), true);
//Take first 8 bytes of $key and append them to the end of $key.
$key .&#61; substr($key, 0, 8);
//Pad for PKCS7
$blockSize &#61; mcrypt_get_block_size(&#39;tripledes&#39;, &#39;ecb&#39;);
$len &#61; strlen($data);
$pad &#61; $blockSize - ($len % $blockSize);
$data .&#61; str_repeat(chr($pad), $pad);
//Encrypt data
$encData &#61; mcrypt_encrypt(&#39;tripledes&#39;, $key, $data, &#39;ecb&#39;);
return base64_encode($encData);
}
public function decrypt($data, $secret)
{
//Generate a key from a hash
$key &#61; md5(utf8_encode($secret), true);
//Take first 8 bytes of $key and append them to the end of $key.
$key .&#61; substr($key, 0, 8);
$data &#61; base64_decode($data);
$data &#61; mcrypt_decrypt(&#39;tripledes&#39;, $key, $data, &#39;ecb&#39;);
$block &#61; mcrypt_get_block_size(&#39;tripledes&#39;, &#39;ecb&#39;);
$len &#61; strlen($data);
$pad &#61; ord($data[$len-1]);
return substr($data, 0, strlen($data) - $pad);
}
问候.
标签&#xff1a;php,cryptography,encryption,tripledes
来源&#xff1a; https://codeday.me/bug/20190717/1491254.html