phpDES加解密

1.DES是对称加解密算法 虽然不对称加密解决了用对称加密传递消息必须传递密钥的问题,但是由于不对称加密无法使用流进行处理, 因此与对称加密相比效率较低,不适用于加密大量数据的场合。 在实际应用中,一般将两种加密方法配合使用。 其基本思想是:用不对称加密算法加密对称加密算法的密钥,用对称加密算法加密实际数据。    接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令, 然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据, 从服务器返回数据也是通过这个口令加密数据,由app端解密数据。 1.获取口令算法(RSA,非对称加解密算法) 接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令, 然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据, 从服务器返回数据也是通过这个口令加密数据,由app端解密数据。

class RSA
{
    /**
     * 公钥和私钥可以在线生成测试
     */
    private $private_key_path='rsa_private_key.pem';
    private $public_key_path='rsa_public_key.pem';
    public function __construct()
    {
        extension_loaded('openssl') or die('php需要openssl扩展支持');
        (file_exists($this->private_key_path) && file_exists($this->public_key_path))
        or die('密钥或者公钥的文件路径不正确');
        $this->privateKey = openssl_get_privatekey(file_get_contents($this->private_key_path));
        /**
         * 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
         */
        $this->publicKey = openssl_get_publickey(file_get_contents($this->public_key_path));

        ($this->privateKey && $this->publicKey) or die('密钥或者公钥不可用');
    }
    public function encode($originalData)
    {
        openssl_public_encrypt($originalData, $encryptData, $this->publicKey);
        return $encryptData;
    }
    public function decode($encryptData)
    {
        openssl_private_decrypt($encryptData, $decryptData, $this->privateKey);
        return $decryptData;
    }
}

2.正式接口调用时的对称加解密接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令,然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据,从服务器返回数据也是通过这个口令加密数据,由app端解密数据。
class Mcrypt_DES
{
     function encrypt($input, $key)
    {
        $input = serialize($input);


        $key = md5($key);
        $key = sha1(substr($key,0,strlen($key)/2), true) . sha1(substr($key,strlen($key)/2), true);


//        $td = mcrypt_module_open('tripledes', '', 'ecb', '');
         $td = mcrypt_module_open('des', '', 'ecb', '');
        $key = substr(md5($key), 0, mcrypt_enc_get_key_size($td));




        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);


        $encrypted_data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);


        return trim(chop(base64_encode($encrypted_data)));
    }
     function decrypt($input, $key)
    {


        $input = trim(chop(base64_decode($input)));




//        $td = mcrypt_module_open('tripledes', '', 'ecb', '');
         $td = mcrypt_module_open('des', '', 'ecb', '');
        $key = md5($key);
        $key = sha1(substr($key,0,strlen($key)/2), true) . sha1(substr($key,strlen($key)/2), true);
        $key = substr(md5($key), 0, mcrypt_enc_get_key_size($td));


        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $decrypted_data = mdecrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);




        return unserialize(trim(chop($decrypted_data)));
    }


}

简单实用:  $key = "woadsfx234x4$";        $i = $this->mencrypt(array("b"=>2),$key);        var_dump($this->mdecrypt($i,$key)) ;   $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表        $mode_list = mcrypt_list_modes();//mcrypt支持的加密模式列表        echo json_encode([$cipher_list,$mode_list]);输出支持的算法和加密模式:[    [        "cast-128",        "gost",        "rijndael-128",        "twofish",        "cast-256",        "loki97",        "rijndael-192",        "saferplus",        "wake",        "blowfish-compat",        "des",        "rijndael-256",        "serpent",        "xtea",        "blowfish",        "enigma",        "rc2",        "tripledes",        "arcfour"    ],    [        "cbc",        "cfb",        "ctr",        "ecb",        "ncfb",        "nofb",        "ofb",        "stream"    ]]接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令,然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据,从服务器返回数据也是通过这个口令加密数据,由app端解密数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值