• PHP加密解密方法,使用openssl加密解密


    /**
     * des 加密算法
     */
    
    function do_mencrypt($input, $key) {
        if (!function_exists("mcrypt_module_open")) {
            throw_exception("请先安装mcrypt扩展");
            exit();
        }
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = pkcs5_pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);
        return $data;
    }
    
    /**
     * des解密算法
     * @param unknown_type $input
     * @param unknown_type $key
     */
    
    function do_mdecrypt($str, $key) {
        if (!function_exists("mcrypt_module_open")) {
            throw_exception("请先安装mcrypt扩展");
            exit();
        }
        $decrypted = mcrypt_decrypt(
            MCRYPT_RIJNDAEL_128,
            $key,
            base64_decode($str),
            MCRYPT_MODE_ECB
        );
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s - 1]);
        $decrypted = substr($decrypted, 0, -$padding);
        return $decrypted;
    }

     使用openssl加解密算法

    <?php
    class AES {
        //AES-128-CBC 加密算法。openssl_get_cipher_methods() 可获取有效密码方式列表。
        /**
        * 参数说明:
        * $data: 加密明文
        * $method: 加密方法
        * $passwd: 加密密钥
        * $iv: 加密初始化向量(可选)
        */
        public static function encrypt($string, $key, $iv)
        {
            $data = openssl_encrypt($string, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
            $data = strtolower(bin2hex($data));
            return $data;
        }
        /**
        * 参数说明:
        * $data: 解密密文
        * $method: 解密加密方法
        * $passwd: 解密密钥
        * $iv: 解密初始化向量(可选)
        */
        public static function decrypt($string, $key,$iv)
        {
            $decrypted = openssl_decrypt(hex2bin($string), 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv);
            return $decrypted;
        }
    }
    
    //查询openssl支持的对称加密算法
    // print_r(openssl_get_cipher_methods());
    $string = '公众号:若水小站';
    $encrypt = AES::encrypt($string,'WangZhaoBo123456','RuoShui123456789');
    $decrypt = AES::decrypt($encrypt, 'WangZhaoBo123456','RuoShui123456789');
    echo '加密后:'.$encrypt;//加密后:06441b13f69ddcf552286ac9bd2dcaf2e6bbbd8bddd92f459e18746a8841282e
    echo '解密后:'.$decrypt;//解密后:公众号:若水小站
  • 相关阅读:
    java内部类_让你一看就明白_再也不用困惑啦
    hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)
    未曾谋面却完成了短信发送功能_API是个好中介
    日历(Calendar)_java版(某年的日历,某月的日历)_用户完全自定义
    让你的网站拥有微博(weibo.com)关注图标
    一个demo告诉你优化算法的强大
    给你八分钟搞定dedeCMS(织梦内容管理系统)
    SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
    oracle数据库:jdbc通用sql分页封装
    浅析HTTP协议
  • 原文地址:https://www.cnblogs.com/wangzhaobo/p/8648928.html
Copyright © 2020-2023  润新知