ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php中常用的加密方式

2021-01-30 14:58:41  阅读:173  来源: 互联网

标签:常用 加密 方式 openssl echo php md5


一、md5

要说php中的最常用的加密方式,md5可以说是当仁不让。

使用起来也很简单便捷。

注:使用方式请看  六、md5加密方式的漏洞及解决方案

 

二、password_hash

作为php5.5以上版本专门用于加密的方式,自然有其独到之处。

使用方式链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79285125

php官方说明链接:http://www.php.net/manual/zh/function.password-hash.php

优点:安全性极高

缺点:php专有函数,不能在其他语言上进行验证。

 

三、sha1

和md5作用类似,加密方式也类似,相当于md5的加强版吧,据说是比md5稍微安全一点

简单使用:

<?php$str = "45456mkmk&&@#$544564";$str = sha1($str);echo $str;//80079e03d65a4ba2314ddca239e7ee08ee50bd2d

 

四、openssl_encrypt(推荐)

作为被废弃的mycrypt加密方式的替代,openssl_encrypt自然有很大改进。条件允许,这款加密方式也比较安全方便,破解起来非常困难。

简单的使用:

<?php$str = 'mmmo56451212158ss0';$openssl_key = '4541&&#886@66';$en_method = 'AES-256-ECB';//get_openssl_cipher_methods();//获取openssl_encrypt的加密方式列表//openssl_encrypt加密$str_en = openssl_encrypt($str,$en_method,$openssl_key);echo $str_en;//R8ZhAYeGBIO2FUVgRj1lD9bHjA3BjSRXDboVC83eXc0=echo "<hr>";//openssl_decrypt解密$str_de = openssl_decrypt('R8ZhAYeGBIO2FUVgRj1lD9bHjA3BjSRXDboVC83eXc0=',$en_method,$openssl_key);echo $str_de;//mmmo56451212158ss0/*** 获取openssl_encrypt method* 就是openssl_encrypt的第二个参数*/function get_openssl_cipher_methods(){$ciphers = openssl_get_cipher_methods();echo "<pre>";print_r($ciphers);echo "</pre>";}

 

五、base64_encode

使用场景:加密url,传输二进制数据(如邮件主题以及图片等),加密cookie,生成密钥,证书等。

这里以加密图片(对图片进行编码)为例:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><?php    //对图片进行64位编码    $img_en =  base64_encode(file_get_contents('./233.jpg'));    //注:编码后,会生成一串字符串,将此生成的字符串填入img的标签里即可,如下 ?><!--html显示编码后的图片--><img src="data:image/png;base64,<?php echo $img_en ?>"></body></html>更多关于base64_encode使用方式: https://blog.csdn.net/u011250882/article/details/49679555

 

六、md5加密方式的漏洞及解决方案

代码:

<?php$str1 = 's878926199a';$str2 = 's214587387a';//echo md5($str1);//0e545993274517709034328855841020//echo md5($str2);//0e848240448830537924465865611904if (md5($str1) == md5($str2)) {    echo 'true';} else {    echo 'false';}

理论上,上面的代码应该返回false,但实际上却返回了true,这就造成了md5加密方式的漏洞。

原因:

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

解决方案:

(1)在用md5进行加密时,至少要将md5加密两次以上(包含两次),或者再加上盐进行加密。如下:

<?php$str1 = 's878926199a';$str2 = 's214587387a';$key = '6655&&skks@';//双重md5加密方式//echo md5(md5($str1))."<br>";//b91d1a7e392c6041ae80b5c6c74a1d83//echo md5(md5($str2));//31e723c4b5c80632064006c430236731//md5加盐加密方式//echo md5($str1.$key)."<br>";//ade1b1ba6d7858ca5581268765184c81//echo md5($str2.$key);//36ef02a862366d6dc53c1aa835eadf87//双重md5加盐加密方式//echo md5(md5($str1.$key))."<br>";//bcc445ad0e2f0d5bc8d57185ea2b9184//echo md5(md5($str2.$key));//90a5e5be9dd2176a63faa28e623dfdb3

(2)使用其他加密方式,比如password_hash,openssl_encrypt

 

标签:常用,加密,方式,openssl,echo,php,md5
来源: https://blog.csdn.net/nana837/article/details/113432428

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有