为了账号安全,请及时绑定邮箱和手机立即绑定

PHPOpenSSL加密

标签:
PHP 算法 安全

加密类


两个解密类用哪个都可以

类1:

<?php
// error_reporting(E_ALL || ~E_NOTICE);
class Encrypt
{
    /**
     * var string $method 加解密方法,可通过openssl_get_cipher_methods()获得
     */
    private $method;

    /**
     * var string $secret_key 加解密的密钥
     */
    private $key;

    /**
     * var string $iv 加解密的向量,有些方法需要设置比如CBC
     */
    private $iv;

    /**
     * var string $options (不知道怎么解释,目前设置为0没什么问题)
     */
    private $options;

    /**
     * 构造函数
     *
     * @param string $key 密钥
     * @param string $method 加密方式
     * @param mixed $options openssl_簇
     * @param string $iv iv向量
     *
     */
    public function __construct($key = 'vxfw2hvftmna6ux3', $method = 'AES-128-ECB', $options = 0, $iv = 'tmna')
    {
        $this->key = $key;
        $this->method = $method;
        $this->options = $options;
        $this->iv = $iv;
    }

    
    /**
     * 加密方法,对数据进行加密,返回加密后的数据
     *
     * @param string $data 要加密的数据
     * @return string
     */
    public function encrypt($data)
    {
        return openssl_encrypt($data, $this->method, $this->key, $this->options);
    }

    /**
     * 解密方法,对数据进行解密,返回解密后的数据
     *
     * @param string $data 要解密的数据
     * @return string
     */
    public function decrypt($data)
    {
        return openssl_decrypt($data, $this->method, $this->key, $this->options);
    }
}

类2:

<?php
class ApUtilOpensslCrypt
{
    //密匙
    var $key = NULL;
    var $algorithm = NULL;
    var $mode = NULL;

    function __construct($key = "vxfw2hvf")
    {
        //初始化密匙
        $this->key = ($key != "") ? $key : "";
        //加密算法
        $this->algorithm = 'AES-128-ECB';
        //加密模式
        $this->mode = OPENSSL_RAW_DATA;
    }

    /**
     *
     * @param string $data 需要加密的字符串
     * @return string
     */
    public function encrypt($data)
    {
        return openssl_encrypt($data,$this->algorithm,$this->key);
        $data = $this->base64_url_encode(openssl_encrypt($data,$this->algorithm,$this->key));
        return $data;
    }

    /**
     * @param string $data 需要解密的字符串
     * @return string
     */
    public function decrypt($data)
    {
        return openssl_decrypt($this->base64_url_decode($data), $this->algorithm, $this->key, $this->mode);
        $decrypted = openssl_decrypt($this->base64_url_decode($data), $this->algorithm, $this->key, $this->mode);
        return $decrypted;
    }

    public function base64_url_encode($input) {
        return strtr($input, '+/=', '-_,');
    }

    public function base64_url_decode($input) {
        return base64_decode(strtr($input, '-_,', '+/='));
    }
}

用法:

$en_two_str = "Ed3MFQFVRRgO4Rz+hZVwtQ==";

//如果类在外部(没和用法在同一个文件里面),需要先引入类
// $aaa = new Encrypt();
// echo "加密前:".$str."\n";
// $en_str = $aaa->encrypt($str);
// echo "加密后:".$en_str."\n";
// echo "解密后:".$aaa->decrypt($en_str)."\n";

// echo "------------------------------"."\n";

$bbb = new ApUtilOpensslCrypt();
// echo "加密前:".$str."\n";
// $en_two_str = $bbb->encrypt($str);
// echo "加密后:".$en_two_str."\n";
echo "解密后:".$bbb->decrypt($en_two_str);
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件工程师
手记
粉丝
19
获赞与收藏
134

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消