平时我们使用加密的时候会用到多种如:
md5、sha1、DES、phpword_hash(php5.5后自带-使用的是Bcrypt)
这里我不推荐sha1与md5,安全度不高,易破解,当然做相应处理也可以使用
我推荐的方法是以下三种:
一、phpword_hash(强烈推荐)
适用条件:php5.5
函数:string password_hash ( string $password , integer $algo [, array $options ]) //字串加密
boolean password_verify ( string $password , string $hash ) //比较字串
password_get_info() //查看哈希值的相关信息
password_needs_rehash() //检查一个hash值是否是使用特定算法及选项创建的
推荐理由:1、使用简单,范例如下:
<?php2、安全度高,它能将字串在内部转化为448位密匙,暴力穷举时间长
$pwd = "123456";
$hash = password_hash($pwd, PASSWORD_DEFAULT); //直接加密,并且密码是动态变化的,不需要更改
echo $hash;
if(password_verify("123456",$hash)){ //直接比对,不需要做处理
echo "密码正确";
}else{
echo "密码出错";
}
不足:性能低(与MD5速度相差16000倍)
二、DES加密
环境:php5.3
DES 使用一个 56位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小。
而3DES则是更为安全的加密方法。
代码如下:
public function encode($key,$str) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$size=mcrypt_enc_get_iv_size($this->td);//设置初始向量的大小
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//创建初始向量
$this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密钥长度(以字节计算)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始处理
//要保存到明文
$con= $str;//$this->mac_addr.$this->ttl
//加密
$this->encode = mcrypt_generic($this->td, $con);
//结束处理
mcrypt_generic_deinit($this->td);
//将密文保存到文件中
// $this->savetofile();
return $this->encode;
}