前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP分享几种常用的加密方式

PHP分享几种常用的加密方式

作者头像
猿哥
发布2019-08-01 12:24:00
9750
发布2019-08-01 12:24:00
举报
文章被收录于专栏:Web技术布道师

应用场景分别为:用户的唯一标识(文章加密id防止爬虫)、生成有规律的code、登录密码的加密

使用hashids加密demo(用户的唯一标识、文章加密id防止爬虫)

(链接:https://juejin.im/post/5d0c8231e51d45775d516f9e)

字符串与十六进制之间的转换加密(生成有规律的code)

代码语言:javascript
复制
/**
     * 字符串转十六进制
     * @param $string
     * @return string
     */
    public function str_encode($string)
    {
        $hex="";
        for($i=0;$i<strlen($string);$i++){
           $hex.=dechex(ord($string[$i]));
        }
        $hex=strtolower($hex);
        return $hex;
    }

   /**
     * 十六进制转字符串
     * @param $hex
     * @return string
     */
    public function str_decode($hex){
        $string="";
        for($i=0;$i<strlen($hex)-1;$i+=2){
            $string.=chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return  $string;
    }

当用户登录账号密码的时候是明文传输的,如图:

所以要修改为加密后的密码,这样比较安全

登录密码的加密

代码语言:javascript
复制
/**
     * 生成key和iv的地址:https://asecuritysite.com/encryption/keygen
     *              https://asecuritysite.com/encryption/PBKDF2z
     */
     
    /**
     * @param string $string 需要加密的字符串
     * @return string
     */
    public function encrypt($string)
    {
        // openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变
        $data = openssl_encrypt($string, 'AES-192-CBC',pack('H*', env('ENCRYPT_KEY')), OPENSSL_RAW_DATA,pack('H*', env('ENCRYPT_IV')));

        $data = base64_encode($data);
        return $data;
    }
    /**
     * @param string $string 需要解密的字符串
     * @return string
     */
    public function decrypt($string)
    {
        $decrypted = openssl_decrypt(base64_decode($string), 'AES-192-CBC',  pack('H*', env('ENCRYPT_KEY')), OPENSSL_RAW_DATA,pack('H*', env('ENCRYPT_IV')));

        return $decrypted;
    }
代码语言:javascript
复制
ENCRYPT_KEY=ENCRYPT_KEY
ENCRYPT_IV=ENCRYPT_IV

以上采用AES-192-CBC加密方式

AES:

aes是基于数据块的加密方式,也就是说,每次处理的数据时一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度

分组加密的几种模式:

ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。

CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。

CFB/OFB:实际上是一种反馈模式,目的也是增强破解的难度。

FCB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串与十六进制之间的转换加密(生成有规律的code)
  • 登录密码的加密
  • AES:
  • 分组加密的几种模式:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档