我有我的加密功能正常工作,但我無法弄清楚如何獲得正確的輸出解密功能。PHP使用TripleDes,PKCS7和ECB加密/解密
這裏是我的加密功能:
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);
}
這裏是我的解密功能:
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);
}
現在我使用的test
的關鍵,我試圖加密1234567
。我從我正在尋找的加密中獲得base64輸出,但是當我去解密時,它不會返回任何內容(空白區域)。
我不是很熟悉加密/解密,所以任何幫助非常感謝!
我建議用AES和ECB替換3DES並添加MAC。 – CodesInChaos
感謝您的建議@CodesInChaos。我無法改變這樣的細節,並且必須使用我所擁有的,儘管它可能不太安全。 –