PHP分享几种常用的加密方式(PHP加密函数)

网友投稿 388 2022-07-22

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

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

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

/**

* 字符串转十六进制

* @param $string

* @return string

*/

public function str_encode($string)

{

$hex="";

for($i=0;$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

$string.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return $string;

}

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

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

登录密码的加密

/**

* 生成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会在第一个密码块运算时加入一个初始化向量。

$hex.=dechex(ord($string[$i]));

}

$hex=strtolower($hex);

return $hex;

}

/**

* 十六进制转字符串

* @param $hex

* @return string

*/

public function str_decode($hex){

$string="";

for($i=0;$i

$string.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return $string;

}

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

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

登录密码的加密

/**

* 生成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会在第一个密码块运算时加入一个初始化向量。

$string.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return $string;

}

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

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

登录密码的加密

/**

* 生成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会在第一个密码块运算时加入一个初始化向量。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:太太太太太太高兴了,GitHub私有存储库免费啦
下一篇:面试官:数据量很大,分页查询很慢,怎么优化?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~