【问题标题】:Blowfish encryption in phpphp中的河豚加密
【发布时间】:2012-11-17 07:38:12
【问题描述】:

我正在为我的应用程序和网站编写加密,但我不知道如何正确加密 php.ini 中的字符串。这段代码已经完成了解密:

function decrypt_blowfish($data,$key){
$iv=pack("H*" , substr($data,0,16));
$key=pack("H*" , $key);
$x =pack("H*" , substr($data,16)); 
$res = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $x , MCRYPT_MODE_CBC, $iv);
return $res;
}

我尝试了简单的:

function encrypt_blowfish($data,$key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $crypttext = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv);
    return $crypttext;
}

但它返回的是奇怪的 ASCI 字符而不是正确的河豚代码。有人可以解释我为什么,我做错了什么吗? 提前致谢

C.H.

【问题讨论】:

    标签: php encryption blowfish


    【解决方案1】:
    function decrypt_blowfish($data,$key){
        $iv=pack("H*" , substr($data,0,16));
        $x =pack("H*" , substr($data,16)); 
        $res = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $x , MCRYPT_MODE_CBC, $iv);
        return $res;
    }
    
    function encrypt_blowfish($data,$key){
        $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $crypttext = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv);
        return bin2hex($iv . $crypttext);
    }
    
    $string = encrypt_blowfish('hello world', 'abc123');
    echo 'ENCRYPTED: ' . $string . "\n";
    echo 'DECRYPTED: ' . decrypt_blowfish($string, 'abc123');
    

    试试看。在解密函数中,您正在从十六进制转换为二进制,因此需要传递一个十六进制值。你的加密函数是输出二进制的,所以你需要用上面的修改把它转换成十六进制。

    【讨论】:

    • 谢谢。肯定可以解决部分问题,但是 decrypt_blowfish(encrypt_blowfish("test",$blowfish_key),$blowfish_key);返回一些 ASCI 字符而不是字符串 "test" 你知道为什么吗?
    • 您需要将 IV 传递给解密函数,该函数希望将其连接到加密字符串,所以... return bin2hex($iv . $crypttext);
    • 解密函数似乎也将密钥从十六进制转换为二进制。这意味着加密函数也应该接受它作为二进制文件,你是这样做还是输入 ASCII 字符?如果不是,则键将不匹配。
    • 我修复了它,并将其作为答案发布。 =o)
    • 这个加解密怎么用?加密函数不返回任何内容。是否需要其他文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多