1

mcrypt_decrypt我对php函数有一个小问题。首先,我使用一个 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 服务器。

4

2 回答 2

1

谢谢大家的反馈,这是我犯的一个愚蠢的错误......实际上'PTfZ6Ephh8LTxXL4In33Og =='在解密函数中是错误的,因为“I”最后是“l”......所以解密不正确.. .但这也不是我的错,因为我是从二维码扫描仪中获取这个字符串的,并且“I”和“l”都显示相同......

于 2013-06-21T10:24:58.907 回答
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;

希望这可以帮助。更多信息在这里

于 2013-06-21T01:40:47.310 回答