CodeIgniter中使用SHA512哈希加密密码并存入数据库的实现方法
CodeIgniter 密码加密处理方案
最优加密方式说明
CodeIgniter 场景下最优的密码加密方案是直接使用PHP原生的password_hash()函数,默认采用bcrypt算法,这也是目前全球web开发领域公认的安全密码存储方案:
- 自动生成随机盐值,无需手动处理加盐逻辑,可抵御彩虹表攻击
- 算法成本可配置,后续硬件性能提升后可以方便调整加密强度
- 无需额外安装扩展,PHP 5.5及以上版本原生支持,和CodeIgniter所有版本兼容
不要使用MD5、SHA1等弱哈希算法,也不要自行实现加密逻辑,避免出现安全漏洞。
代码修改具体位置
你现有代码只需要修改构造$userData数组时password字段的赋值逻辑即可,修改点如下:
找到你注册方法里的这段代码:
$userData = array( 'first_name' => strip_tags($this->input->post('first_name')), 'last_name' => strip_tags($this->input->post('last_name')), 'email' => strip_tags($this->input->post('email')), 'password' => strip_tags($this->input->post('password')), 'gender' => $this->input->post('gender'), 'mobile_no' => strip_tags($this->input->post('mobile_no')) );
将其中password行替换为加密后的赋值:
'password' => password_hash(strip_tags($this->input->post('password')), PASSWORD_DEFAULT),
修改后$userData中存储的就是加密后的密码哈希值,直接写入数据库即可。
配套登录验证逻辑注意事项
登录时不要将用户输入的密码加密后和数据库值直接比对,需要使用password_verify()函数做校验,示例逻辑如下:
// 从数据库取出对应用户的哈希密码 $db_password $input_password = $this->input->post('password'); if(password_verify($input_password, $db_password)){ // 密码验证通过,执行登录逻辑 }else{ // 密码错误 }
另外注意数据库存储密码的字段需要设置为varchar(255),预留足够长度适配后续可能的算法升级。
内容的提问来源于stack exchange,提问作者Rana Sharma
相关产品推荐
相关产品推荐

