urlencode(str)//加密
urldecode(str)//解密
❷ php代码怎么加密最好,不能破解的那种
在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
MD5
相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:
$password = md5($_POST["password"]);
上面这段代码是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受欢迎了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密用户的密码的。
SHA256 和 SHA512
其实跟前面的MD5同期的还有一个SHA1加密方式的,不过也是算法比较简单,所以这里就一笔带过吧。而这里即将要说到的SHA256 和 SHA512都是来自于SHA2家族的加密函数,看名字可能你就猜的出来了,这两个加密方式分别生成256和512比特长度的hash字串。
他们的使用方法如下:
<?php
$password = hash("sha256", $password);
PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
盐值
在加密的过程,我们还有一个非常常见的小伙伴:盐值。对,我们在加密的时候其实会给加密的字符串添加一个额外的字符串,以达到提高一定安全的目的:
<?php
function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);}
Bcrypt
如果让我来建议一种加密方式的话,Bcrypt可能是我给你推荐的最低要求了,因为我会强烈推荐你后面会说到的Hashing API,不过Bcrypt也不失为一种比较不错的加密方式了。
<?php
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);return crypt($password, $salt);
}
}
Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以$2a$或者$2y$开头,详细资料可以参考下面的链接:
http://www.php.net/security/crypt_blowfish.php更多资料可以看这里:
http://php.net/manual/en/function.crypt.phpPassword Hashing API
这里才是我们的重头戏,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
password_hash() – 对密码加密.
password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
password_needs_rehash() – 给密码重新加密.
password_get_info() – 返回加密算法的名称和一些相关信息.
虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。
<?php
$hash = password_hash($passwod, PASSWORD_DEFAULT);对,就是这么简单,一行代码,All done。
PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我会说推荐这个,不过因为Password Hashing API做得更好了,我必须郑重地想你推荐Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写:
<?php
$options = [
'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
<?php
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很简单的吧,直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了。
然而,如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了:
<?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);// don't forget to store the new hash!
}
只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。
简单地说一下password_get_info(),这个函数一般可以看到下面三个信息:
algo – 算法实例
algoName – 算法名字
options – 加密时候的可选参数
所以,现在就开始用PHP 5.5吧,别再纠结低版本了。
Happy Hacking
❸ 如何对传递的id加密解密
你可以多加一个参数做校验你给id添加一个salt假设 salt为abc你先计算md5("1234"."abc")得出一串字符串"sdsldfsldflslfs2221"这时url就变为:a.php?id=1234&code=sdsldfsldflslfs2221你接收到请求后,再计算一次md5($_GET['id']."abc")看看接收到的code是否和"sdsldfsldflslfs2221"一致这样就可以避免别人通过修改id进行访问若是闲字符串太长,可以只取前4个作为校验即可
❹ 如何对PHP文件进行加密
对PHP文件进行加密,通常使用 Zend Guard,这是目前市面上应用比较多的PHP源码加密产品。
加密流程大概如下:
1、打开Zend Guard 5.5.0,[File]->[New]->[Zend Guard Project],新建项目。
2、点击 Next ,下一步。弹出如下对话框,选择要进行加密的源文件或文件夹。
3、接下来是选择PHP的版本[与你web服务器上PHP的版本相对照],这里很重要,版本不对会出错,[Finish]完成项目的创建。
4、在Zend Guard左侧的Guard Explorer中,可以看到你新建的项目了,鼠标选中项目名称后,右键单击[Encode Project],完成。
❺ php 如何给用户名 加密一部分
这个只是在前端显示而已,后端存储的时候用户名这类一般不会加密,直接用字符串处理函数处理一下就可以了。
❻ php加密解密问题,一道10000+公司的phper,大公司的php面试题。
<?php
/**
*加密解密类
*该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
*@author深秋的竹子
*@versionalpha
*@加密原则标记长度+补位+数字替换
*@加密步骤:
*将a-z,A-Z,0-962个字符打乱,取前M(数字最大的位数)位作为标记长度字符串,取第M+1到第M+10位为数字替换字符串,剩余的为补位字符串
*1.计算数字长度n,取乱码的第n位作为标记长度。
*2.计算补位的长度,加密串的长度N-1-n为补位的长度。根据指定的算法得到补位字符串。
*3.根据数字替换字符串替换数字,得到数字加密字符串。
*标记长度字符+补位字符串+数字加密字符串=加密串
*Usage:
*$obj=newXDeode(9);
*$e_txt=$obj->encode(123);
*echo$e_txt.'<br/>';
*echo$key->decode($e_txt);
*/
classXDeode{
private$strbase="";
private$key,$length,$codelen,$codenums,$codeext;
function__construct($length=9,$key=2543.5415412812){
$this->key=$key;
$this->length=$length;
$this->codelen=substr($this->strbase,0,$this->length);
$this->codenums=substr($this->strbase,$this->length,10);
$this->codeext=substr($this->strbase,$this->length+10);
}
functionencode($nums){
$rtn="";
$numslen=strlen($nums);
//密文第一位标记数字的长度
$begin=substr($this->codelen,$numslen-1,1);
//密文的扩展位
$extlen=$this->length-$numslen-1;
$temp=str_replace('.','',$nums/$this->key);
$temp=substr($temp,-$extlen);
$arrextTemp=str_split($this->codeext);
$arrext=str_split($temp);
foreach($arrextas$v){
$rtn.=$arrextTemp[$v];
}
$arrnumsTemp=str_split($this->codenums);
$arrnums=str_split($nums);
foreach($arrnumsas$v){
$rtn.=$arrnumsTemp[$v];
}
return$begin.$rtn;
}
functiondecode($code){
$begin=substr($code,0,1);
$rtn='';
$len=strpos($this->codelen,$begin);
if($len!==false){
$len++;
$arrnums=str_split(substr($code,-$len));
foreach($arrnumsas$v){
$rtn.=strpos($this->codenums,$v);
}
}
return$rtn;
}
}
一个PHP针对数字的加密解密类
你可以参照这个来写
❼ 谁能告诉我这个php是如何加密的吗
算法都给出了,这个就是简单的查字典转换为字符,下面举例演示算法过程:
最简单的,假设itemid值为1,程序把它乘以16,然后取A-Za-z0-9+/这64个字符里面对应的那个,那么结果去是第16个,就是Q(从0开始数)
继续几个最简单例子,itemid值为2、取32位,值是g,明白过来了没有Z是25、a是27、...;再来一个itemid值为3、取48位、值为w
上面的特殊情况是乘积小于64,那么结果就是一个字符。但是一般都不会这么简单,如果乘积大于64的呢,程序代码是按64取模的多位数字,例如itemid值为5,那么乘积80,第一次取第16个字符、第二次取第1个字符,可以看成倒序的64进制数。
❽ PHP代码如何加密
<?php
functionencode_file_contents($filename){
$type=strtolower(substr(strrchr($filename,'.'),1));
if('php'==$type&&is_file($filename)&&is_writable($filename)){//如果是PHP文件并且可写则进行压缩编码
$contents=file_get_contents($filename);//判断文件是否已经被编码处理
$contents=php_strip_whitespace($filename);
//去除PHP头部和尾部标识
$headerPos=strpos($contents,'<?php');
$footerPos=strrpos($contents,'?>');
$contents=substr($contents,$headerPos+5,$footerPos-$headerPos);
$encode=base64_encode(gzdeflate($contents));//开始编码
$encode='<?php'." eval(gzinflate(base64_decode("."'".$encode."'"."))); ?>";
returnfile_put_contents($filename,$encode);
}
returnfalse;
}
//调用函数
$filename='dam.php';
encode_file_contents($filename);
echo"OK,加密完成!"
?>
❾ 如何给php代码加密
前台加密 后台接收到后 在和盐值拼接 在加密 存入数据库 我用md5举例
前台:md5(pwd); //前台找一个js加密扩展就行
后台:
$salt = mt_rand(100000,999999); //随机盐值
$pwd = md5($_GET('pwd').$salt); //这样双重加密后入库了
登录验证时 前台也记得加密哦