当前位置: 首页 > 后端技术 > PHP

PHP中实现加密的几种方式

时间:2023-03-29 23:42:54 PHP

PHP中的加密方式如下MD5加密字符串md5(string$str[,bool$raw_output=false])参数str--原始字符串。raw_output–如果可选的raw_output设置为TRUE,则MD5消息摘要将以原始二进制格式返回,长度为16字节。这是一个不可逆的加密,执行下面的代码$password='123456';echomd5($密码);结果是e10adc3949ba59abbe56e057f20f883eCrype加密字符串crypt(string$str[,string$salt])crypt()返回基于标准的UNIXDES算法哈希字符串,或系统上可用的其他替代算法。参数str--要散列的字符串。salt--可选的盐字符串。如果不提供,算法行为将由不同的算法实现决定,并可能导致不可预知的结局。这也是一种不可逆的加密,执行下面的代码复制密码代码如下:$password='123456';$salt="test";//只取前两个echocrypt($password,$salt);结果是teMGKvBPcptKo使用自动加盐值的例子如下:复制代码代码如下:$password=crypt('mypassword');//自动生成salt值/密码验证时应该使用crypt()得到的完整结果作为salt值,避免使用不同的hash算法带来的问题。(如上所述,基于标准DES算法的密码哈希使用2个字符的盐,但基于MD5的哈希使用12个字符的盐。)/if(crypt('mypassword',$password)==$password){echo"Passwordverified!";}执行结果输出Passwordverified!使用具有不同哈希类型的crypt()的示例如下:如下所示:if(CRYPT_STD_DES==1){echo'StandardDES:'.地穴('rasmuslerdorf','rl')。"\n";}if(CRYPT_EXT_DES==1){echo'ExtendedDES:'.地穴('rasmuslerdorf','_J9..rasm')。"\n";}if(CRYPT_MD5==1){echo'MD5:'.crypt('rasmuslerdorf','$1$rasmusle$')."\n";}if(CRYPT_BLOWFISH==1){echo'Blowfish:'.crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$')。"\n";}if(CRYPT_SHA256==1){echo'SHA-256:'.crypt('rasmuslerdorf','$5$rounds=5000$usesomesillystringforsalt$')."\n";}if(CRYPT_SHA512==1){echo'SHA-512:'.crypt('rasmuslerdorf','$6$rounds=5000$usesomesillystringforsalt$')。"\n";}其结果如下StandardDES:rl.3StKT.4T8MExtendedDES:_J9..rasmBYk8r9AiWNcMD5:$1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish:$2a$07$usesomesillystringfore2uDLvp1Ii2e./UpC89sBjdH6hiSHA-256:$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512:$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21在crypt()函数支持多重散列的系统上,下面的常量根据对应类型是否可用设置为0或1:CRYPT_STD_DES-基于标准DES算法的散列使用“./0-9A-Za-z”字符串中的两个字符作为盐值非法使用在盐值字符中将导致crypt()失败。CRYPT_EXT_DES-基于扩展DES算法的散列。它的盐值是一个9字符的字符串,由一个下划线、后跟一个4字节的循环计数和一个4字节的盐值组成。它们被编码为可打印字符,每个6位,最低有效位在前。0到63被编码为“./0-9A-Za-z”。在salt中使用非法字符将导致crypt()失败。CRYPT_MD5-使用以$1$开头的12个字符的字符串salt的MD5散列。CRYPT_BLOWFISH-Blowfish算法使用以下盐值:“$2a$”、两位成本参数、“$”和来自“./0-9A-Za-z”的64位字符串。在salt中使用超出此范围的字符将导致crypt()返回空字符串。两位数的cost参数是循环次数的以2为底的对数,取值范围是04-31。如果超出此范围,crypt()将失败。CRYPT_SHA256-SHA-256算法使用以$5$开头的16个字符的字符串salt进行散列。如果salt字符串以“rounds=$”开头,N的数值将用于指定要执行的哈希轮数,很像Blowfish算法的成本参数。默认循环次数为5000,最小为1000,最大为999,999,999。超出此范围的N将被转换为最接近的值。CRYPT_SHA512-SHA-512算法使用以$6$开头的16个字符的字符串salt进行散列。如果salt字符串以“rounds=$”开头,N的数值将用于指定要执行的哈希轮数,很像Blowfish算法的成本参数。默认循环次数为5000,最小为1000,最大为999,999,999。超出此范围的N将被转换为最接近的值。Sha1加密字符串sha1(string$str[,bool$raw_output=false])参数str--输入字符串。raw_output–如果可选的raw_output参数设置为TRUE,则sha1摘要将以原始格式返回,长度为20个字符,否则返回值是一个长度为40个字符的十六进制数。这也是一种不可逆的加密。执行以下代码:$password='123456';echosha1($password);结果是7c4a8d09ca3762af61e59520943dc26494f8941b。以上几种虽然都是不可逆加密,但是也可以通过查字典来解密。下面的地址提供了对上述加密结果进行解密的函数。http://www.cmd5.com/然后大家加进去,就算加密也没用。其实只要你的加密足够复杂,被破解的可能性就更小。比如使用上面三种加密方式混合加密,然后给大家推荐一个php加密库。URLEncryptionstringurlencode(string$str)该函数便于对字符串进行编码并在URL的请求部分使用它,同时也便于将变量传递到下一页。返回一个字符串,其中包含除-_之外的所有非字母数字字符。替换为百分号(%)后跟两位十六进制数字,空格编码为加号(+)。此编码与WWW表单POST数据相同,并且与application/x-www-form-urlencoded媒体类型相同。由于历史原因,这种编码与RFC1738编码在编码空间上的区别在于加号(+)。stringurldecode(string$str)对给定编码字符串中的任何%##进行解码。加号('+')被解码为空格字符。这是一种可逆加密。urlencode方法用于加密,urldecode方法用于解密。执行以下代码:$url='http://www.xxx.com/CraryPrimi...';$encodeUrl=urlencode($url);echo$encodeUrl。"n";//如果显示在网页上,将n改为
echourldecode($encodeUrl);结果如下http%3A%2F%2Fwww.xxx。com%2FCraryPrimitiveMan%2Fhttp://www.xxx.com/CraryPrimi...基于RFC3986加密URL的方法如下:复制代码代码如下:functionmyUrlEncode($string){$entities=array('%21','%2A','%27','%28','%29','%3B','%3A','%40','%26','%3D'、'%2B'、'%24'、'%2C'、'%2F'、'%3F'、'%25'、'%23'、'%5B'、'%5D');$replacements=array('!','*',"'","(",")",";",":","@","&","=","+","$",",","/","?","%","#","[","]");returnstr_replace($entities,$replacements,urlencode($string));}Base64信息编码加密字符串base64_encode(string$data)使用base64对数据进行编码。这种编码旨在使二进制数据可以通过非纯8位传输层传输,例如电子邮件的正文。Base64编码的数据比原始数据多占用大约33%的空间。stringbase64_decode(string$data[,bool$strict=false])解码base64编码数据。参数数据——编码数据。strict–如果输入数据不在base64字母表中,则返回FALSE。执行以下代码:复制代码如下:$name='CraryPrimitiveMan';$encodeName=base64_encode($name);echo$encodeName。"n";echobase64_decode($encodeName);结果如下复制代码如下:Q3JhcnlQcmltaXRpdmVNYW4=CraryPrimitiveMan推荐phpass使用phpass0.3测试,它是在将用户密码存储到数据库之前通过散列来保护用户密码的标准方法。许多常用的哈希算法(如md5甚至sha1)对于密码存储来说都是不安全的,因为黑客可以使用这些算法轻松破解密码。散列密码最安全的方法是使用bcrypt算法。开源phpass库在一个易于使用的类中提供了此功能。复制代码代码如下:HashPassword('我的超酷密码');//你现在可以安全地将$hashedPassword保存到数据库中了!//通过比较用户输入的内容(生成的哈希值)和我们之前计算的哈希值来判断用户是否输入了正确的密码$hasher->CheckPassword('密码错误',$hashedPassword);//false$hasher->CheckPassword('我的超酷密码',$hashedPassword);//true?>以上就是本文对PHP加密方式的介绍,希望大家喜欢。