PHP加密方式分为单项散列加密,对称加密,非对称加密这几类。
像常用的MD5、hash、crypt、sha1这种就是单项散列加密,单项散列加密是不可逆的。
像URL编码、base64编码这种就是对称加密,是可逆的,就是说加密解密都是用的同一秘钥。
除此外就是非对称加密,加密和解密的秘钥不是同一个,如果从安全性而言,加密的信息如果还想着再解密回来,非对称加密无疑是最为安全的方式。
//这里是一个字符串
$str="this is string";
//通过MD5加密函数加密
$res=md5($str);
//在PHP中,MD5()函数还有第二个参数,为bool类型,当为TRUE是返回的加密是16字符原始
//二进制格式字符串,当为FALSE是返回32位的16进制,默认为false,一般都默认
//返回二进制
$res=md5($str,true);
Crypt()加密算法
crypt()加密算法是一种不可逆的加密算法,他有两个参数,一个是需要加密的字符串,另外一个是盐值(或者成为干扰字符串),如果没有指定第二个参数那么将自己随机生成一个干扰字符串并且是以MD5加密的方式。另外这个函数在不同的操作系统上的表现形式也是不一样的,会自动检测。
//需要加密的字符串
$str="this is string";
//使用crypt加密,不指定盐值
$res=crypt($str);
//指定盐值,但是盐值只能写两位,如果超过了则只会取前两位,在某些系统中会直接返回FALSE
$res=crypt($str,'jm');
//需要加密的字符串
$str="this is string";
//通过sha1进行加密
$res=sha1($str);
//通过指定第二个参数加密
$res=sha1($str,true);
URL编码加密
对于我们的网站,直接暴露给用户的就是地址栏的传参,对于这一部分都是明文的,所以我们可以使用基本的加密算法来简单加密一下,注意,此种方式加密是可逆的,也就是说加密后的密文我们可以解密之后看到,所以如果你想实现真正的加密,并不推荐这个加密算法。
在PHP中对于URL加密解密用到两个函数urlencode和urldecode.
//需要加密的网址
$str = "http://www.baidu.com?name=zhangsan&phone=112";
//使用urlencode加密
$res = urlencode($str);
//使用urldecode解密
$result = urldecode($res);
Base64编码加密
大家注意,虽然base64写到本节加密算法中,但是他并不是主要用来加密的,而且从大多数的程序来说,几乎没有人会用他作为加密手段来加密数据,那么他的作用主要是用于做什么呢?这要说的base64加密的机制了。
base64加密本质上说就是把数据转换为ASCLL码,比如一个图片进行base64编码就会变成一堆以Ascll码连接的字符串,这会更有利于文件的传输,当然base64的作用在与文件的传输。例如手机客户端上传文件到服务器,使用base64编码可以轻松实现文件的传输。
base64加密函数
base64_encode($data);
base64解密函数
base64_decode($data);
hash($ago,$data);
$ago是可以指定加密使用的哈希算法,例如:"md5","sha256","haval160,4" 等。
$data是要加密的数据
Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
password_hash() – 对密码加密.
password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
password_needs_rehash() – 给密码重新加密.
password_get_info() – 返回加密算法的名称和一些相关信息.
$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);
密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
if (password_verify($password, $hash)) {
// Pass }
else {
// Invalid
}
class AES {
/**
* 加密方法
*
* @param $str
* @param $secret
*
* @return string
*/
public static function encrypt($str, $secret){
return base64_encode(openssl_encrypt($str,"AES-128-ECB",$secret,OPENSSL_RAW_DATA));
}
/**
*
* 解密方法
*
* @param $str
* @param $secret
*
* @return string
*/
public static function decrypt($str, $secret){
return openssl_decrypt(base64_decode($str),"AES-128-ECB",$secret, OPENSSL_RAW_DATA);
}
}
看完本文有收获?点赞、分享是最大的支持!