分享几种PHP常用的加密方式。
Posted WXiangQian王先森
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享几种PHP常用的加密方式。相关的知识,希望对你有一定的参考价值。
应用场景分别为:用户的唯一标识(文章加密id防止爬虫)、生成有规律的code、登录密码的加密
使用hashids加密demo(用户的唯一标识、文章加密id防止爬虫)
字符串与十六进制之间的转换加密(生成有规律的code)
/**
* 字符串转十六进制
* @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;
当用户登录账号密码的时候是明文传输的,如图:
所以要修改为加密后的密码,这样比较安全
简单的openssl_encrypt加密
public function encrypt($string)
// openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变
$method = 'DES-ECB';//加密方法
$passwd = '12344321';//加密密钥
$data = openssl_encrypt($string, $method, $passwd);
return $data;
public function decrypt($string)
$method = 'DES-ECB';//加密方法
$passwd = '12344321';//加密密钥
$decrypted = openssl_decrypt($string, $method, $passwd);
return $decrypted;
登录密码的加密
/**
* 生成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;
ENCRYPT_KEY=ENCRYPT_KEY
ENCRYPT_IV=ENCRYPT_IV
以上采用AES-192-CBC加密方式
AES:
aes是基于数据块的加密方式,也就是说,每次处理的数据时一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度
分组加密的几种模式:
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB:实际上是一种反馈模式,目的也是增强破解的难度。
FCB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
持续更新
以上是关于分享几种PHP常用的加密方式。的主要内容,如果未能解决你的问题,请参考以下文章