欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
简单实现js密码强度检测,友好的html css样式提示 CodeIgniter4中如何在view或者helper函数中访问当前控制器对象
未知  在PHP程序中实现安全的用户密码保存-加密存储和登录验证
[ 发布日期:1年前 (2023-11-29) ]   [ 来自:本站原创 ] [分类:原创作品]
在网络世界中,用户密码的安全问题日益受到关注,用户身份验证和密码保护变得愈发重要。
不用说明码保存密码这种低级问题,从2004年MD5碰撞漏洞以来在系统中使用md5保存密码都是不可以想象的灾难。
采用md5、sha1甚至是加盐的md5、sha256都已经是不安全的了
目前有四种仍然安全的密码哈希算法:
  •  Argon2 
  •  bcrypt 
  •  scrypt 
  •  PBKDF2 


一些PHP系统的生成环境可以没有安装PECL包,这种情况下 scrypt 哈希加密算法 就无法使用。
如果可能的话建议优先使用 scrypt 哈希加密算法。

除此之外我们建议优先使用 bcrypt,更重要的是PHP提供了内置函数支持。
我们可以直接使用 password_hash()  和  password_verify() 

使用bcrypt需要注意它的两点限制:
  1. 它最多只支持72个字符,超过的字符会被截断。
  2. 如果字符串中含有NUL(\0)字符时会被截断


对于一般网站来说这都不是问题,用户密码通常不会超过72个字符。
网页端输入也不可能会出现NUL(\0)字符。



实际实现代码


用户密码的加密:
CodeIgniter4本身有提供加密库,我这里直接使用了CodeIgniter4自带的加密库。
也可以使用专业的 php-encryption 加密库。
[复制到剪贴板]

/**
 * Hash密码,并加密Hash值。返回加密后的结果。
 * 返回值可以直接保存到数据库中。
 * @param $password 用户输入的密码
 * @return 返回加密后的Hash值
 */ 
function password_hashAndEncrypt(string $password): string {      
    
$hash password_hash($passwordPASSWORD_DEFAULT);
    if (!
is_string($hash)) 
        return 
false;
    
$encrypter \Config\Services::encrypter();

    return 
base64_encode($encrypter->encrypt($hash));
    
//php-encryption
    //return Crypto::encrypt($hash, $aesKey);




在用户登录时验证密码是否正确,这里进行函数封装:
[复制到剪贴板]

/**
 * 解密数据库中的Hash值并验证密码是否正确
 * @param $password 用户输入的密码
 * @param $ciphertext 数据库保存的加密hash值
 * @return 返回验证是否成功
 */ 
function password_decryptAndVerify(string $passwordstring $ciphertext): bool{
    
$encrypter \Config\Services::encrypter();
    
$hash $encrypter->decrypt(base64_decode($ciphertext));
    
//php-encryption
    //$hash = Crypto::decrypt($ciphertext, $aesKey);

    
if (!is_string($hash)) 
       return 
false;
    
    return 
password_verify($password$hash);





加密算法库下载


专业加密算法库 php-encryption-2.4.0.zip
引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/276
复制引用地址https://www.rickw.cn/trackback/276/GBK
[ 分类:原创作品  | 查看:1089 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5