Tôi đã có chức năng mã hóa hoạt động đúng cách tuy nhiên tôi không thể tìm ra cách để có được chức năng giải mã để cung cấp đầu ra phù hợp.Mã hóa/giải mã PHP với TripleDes, PKCS7 và ECB
Đây là chức năng mã hóa của tôi:
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);
}
Đây là chức năng giải mã của tôi:
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);
}
Ngay bây giờ tôi đang sử dụng một chìa khóa của test
và tôi đang cố gắng để mã hóa 1234567
. Tôi nhận được đầu ra base64 từ mã hóa mà tôi đang tìm kiếm, nhưng khi tôi giải mã nó sẽ không trả về gì cả (một vùng trống).
Tôi không thạo nhiều về mã hóa/giải mã nên mọi trợ giúp đều được đánh giá cao !!
Tôi khuyên bạn nên thay thế 3DES bằng AES, ECB bằng CBC và thêm MAC. – CodesInChaos
Cảm ơn bạn đã giới thiệu @CodesInChaos. Tôi không thể thay đổi các chi tiết cụ thể như vậy và phải sử dụng những gì tôi có mặc dù nó có thể kém an toàn hơn. –