PHP中的加密方法的比对

时间:2022-03-16 06:20:13

平时我们使用加密的时候会用到多种如:

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、使用简单,范例如下:

<?php
$pwd = "123456";
$hash = password_hash($pwd, PASSWORD_DEFAULT); //直接加密,并且密码是动态变化的,不需要更改
echo $hash;

if(password_verify("123456",$hash)){ //直接比对,不需要做处理
echo "密码正确";
}else{
echo "密码出错";
}
2、安全度高,它能将字串在内部转化为448位密匙,暴力穷举时间长

不足:性能低(与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;
}