我对php mcrypt_decrypt
函数有一个小问题。首先,我使用一个16字节的字符串,并使用mcrypt_encrypt
加密它;然后,我使用base64_encode
,并将输出放到mcrypt_decrypt
,以获取初始字符串。
但输出并不是预期的结果。我检查了用于解码的base64
解码字符串输入是mcrypt_decrypt
产生的确切输出。这是我的代码:
//encrypt
$str="KKQT9W4st7vmdkps";
$key="43625A8C1E4330BDF84DDEE3DD105037";
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
$passcrypt=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
echo $passcrypt;
输出PTfZ6Ephh8LTxXL4In33Og==
。解密脚本如下:
//decrypt
$str='PTfZ6Ephh8LTxXL4In33Og==';
$key='43625A8C1E4330BDF84DDEE3DD105037';
$str = base64_decode($str);
$str = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$str, MCRYPT_MODE_ECB,''),"\0");
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
echo $str;
输出不是KKQT9W4st7vmdkps
,而是-nγ kk7Ζn’T
。有任何想法吗?我正在使用XAMPP和Apache服务器。
答案 0 :(得分:1)
Thx家伙反馈这是我犯的一个愚蠢的错误......实际上'PTfZ6Ephh8LTxXL4In33Og =='在解密函数中出错了导致“我”到底是“l”...所以解密不是正确...但这不是我的错,因为我从QR CODE扫描仪获取此字符串并且“I”和“l”都显示相同...
答案 1 :(得分:0)
对于加密,您需要:
1)创建加密资源
$str = "KKQT9W4st7vmdkps";
$key = "43625A8C1E4330BDF84DDEE3DD105037";
$r = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '',MCRYPT_MODE_ECB, '');
2)根据$r
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($r),MCRYPT_RAND);
3)使用资源,密钥和字符串向量初始化模块
mcrypt_generic_init($r,$key,$iv);
4)使用资源$r
$encrypted = mcrypt_generic($r,$str);
5)使用base64_encode
$encoded = base64_encode($encrypted);
if(!mcrypt_generic_deinit($r) || !mcrypt_module_close($r))
$encoded = false;
6)回应它
echo 'Encrypted: '.$encoded;
对于解密,它就像加密的反向过程
//Using the same enrypted string
$decoded = (string) base64_decode(trim($encoded));
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '',MCRYPT_MODE_ECB, '');
$ivs = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td,$key, $ivs);
$decoded = (string) trim(mdecrypt_generic($td, $decoded));
if(!mcrypt_generic_deinit($td) || !mcrypt_module_close($td))
$decoded = false;
回应它
echo 'Decrypted: '. $decoded;
希望这会有所帮助。更多信息here。