PHP加密/解密与TripleDes,PKCS7和ECB [英] PHP Encrypt/Decrypt with TripleDes, PKCS7, and ECB
问题描述
我的加密功能正常工作,但我无法弄清楚如何获取解密功能以提供正确的输出。
这是我的加密功能: $ p
$ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
$ key = md5(utf8_encode($ secret),true);
//以$ key的前8个字节,并将它们追加到$ key的末尾。
$ key。= substr($ key,0,8);
// Pad for PKCS7
$ blockSize = mcrypt_get_block_size('tripledes','ecb');
$ len = strlen($ data);
$ pad = $ blockSize - ($ len%$ blockSize);
$ data。= str_repeat(chr($ pad),$ pad);
//加密数据
$ encData = mcrypt_encrypt('tripledes',$ key,$ data,'ecb');
返回base64_encode($ encData);
}
这是我的解密功能:
函数解密($ data,$ secret)
{
$ text = base64_decode($ data);
$ data = mcrypt_decrypt('tripledes',$ secret,$ text,'ecb');
$ block = mcrypt_get_block_size('tripledes','ecb');
$ pad = ord($ data [($ len = strlen($ data)) - 1]);
返回substr($ data,0,strlen($ data) - $ pad);
}
现在我正在使用一个 / code>我正在尝试加密
1234567
。我得到我正在寻找的加密的base64输出,但是当我去解密时,它不会返回任何东西(一个空白区域)。
我不是很精通在加密/解密,所以任何帮助是非常感谢!!
感谢任何人谁看看我的问题。我想我已经解决了,这里是我的完整解决方案。希望它有助于出现类似问题的其他人:
函数加密($ data,$ secret)
{
//从哈希生成一个密钥
$ key = md5(utf8_encode($ secret),true);
//以$ key的前8个字节,并将它们追加到$ key的末尾。
$ key。= substr($ key,0,8);
// Pad for PKCS7
$ blockSize = mcrypt_get_block_size('tripledes','ecb');
$ len = strlen($ data);
$ pad = $ blockSize - ($ len%$ blockSize);
$ data。= str_repeat(chr($ pad),$ pad);
//加密数据
$ encData = mcrypt_encrypt('tripledes',$ key,$ data,'ecb');
返回base64_encode($ encData);
}
这里是新的解密功能。
函数解密($ data,$ secret)
{
//从哈希生成一个密钥
$ key = md5(utf8_encode($ secret),true);
//以$ key的前8个字节,并将它们追加到$ key的末尾。
$ key。= substr($ key,0,8);
$ data = base64_decode($ data);
$ data = mcrypt_decrypt('tripledes',$ key,$ data,'ecb');
$ block = mcrypt_get_block_size('tripledes','ecb');
$ len = strlen($ data);
$ pad = ord($ data [$ len-1]);
返回substr($ data,0,strlen($ data) - $ pad);
}
我必须添加相同的代码,以正确的格式生成密钥我运行了mycrypt_decrypt函数。
I've got my encryption function working properly however I cannot figure out how to get the decrypt function to give proper output.
Here is my encrypt function:
function Encrypt($data, $secret)
{
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);
//Take first 8 bytes of $key and append them to the end of $key.
$key .= substr($key, 0, 8);
//Pad for PKCS7
$blockSize = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);
//Encrypt data
$encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');
return base64_encode($encData);
}
Here is my decrypt function:
function Decrypt($data, $secret)
{
$text = base64_decode($data);
$data = mcrypt_decrypt('tripledes', $secret, $text, 'ecb');
$block = mcrypt_get_block_size('tripledes', 'ecb');
$pad = ord($data[($len = strlen($data)) - 1]);
return substr($data, 0, strlen($data) - $pad);
}
Right now I am using a key of test
and I'm trying to encrypt 1234567
. I get the base64 output from encryption I'm looking for, but when I go to decrypt it returns nothing (a blank area).
I'm not very well versed in encryption/decryption so any help is much appreciated!!
Thanks for anyone who took a look at my problem. I think I have solved it and here is my full solution. Hopefully it helps out someone else who is having a similar issue:
function Encrypt($data, $secret)
{
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);
//Take first 8 bytes of $key and append them to the end of $key.
$key .= substr($key, 0, 8);
//Pad for PKCS7
$blockSize = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);
//Encrypt data
$encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');
return base64_encode($encData);
}
And here is the new decrypt function.
function Decrypt($data, $secret)
{
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);
//Take first 8 bytes of $key and append them to the end of $key.
$key .= substr($key, 0, 8);
$data = base64_decode($data);
$data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');
$block = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = ord($data[$len-1]);
return substr($data, 0, strlen($data) - $pad);
}
I had to add the same code for generating the key in the correct format before I ran the mycrypt_decrypt function.
这篇关于PHP加密/解密与TripleDes,PKCS7和ECB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!