• php网站密码md5加密串


    PHP中“==”的一些坑

    PHP 是弱类型的语言,会自动进行数据类型转换,这无疑给我们的开发带来了极大的方便。可事实真是如此吗?今天我们就从==说起。

    栗子

    首先,看一下这段代码。猜猜看结果会是什么

    <?php
    var_dump(md5('240610708') == md5('QNKCDZO'));
    var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
    var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
    var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
    var_dump('0010e2' == '1e3');
    var_dump('0x1234Ab' == '1193131');
    var_dump('0xABCdef' == ' 0xABCdef');

    var_dump(0 == 'abcdefg');
    var_dump(1 == '1abcdef');
    ?>

    一眼看过,很明显肯定都是false吧,但运行代码后发现全是true

    WTF!

    为什么会这样

    开头我已经说过了,PHP 是弱类型的语言。使用==对比两个变量时,当有一个变量为整数,另外一个变量也会转换为整数。这也就解释了,为什么0 == 'abcdefg'1 == '1abcdef'会成立。

    但是,其他的代码呢?字符串难道还会转换?

    PHP 手册上为我们提供了解释说明。

    If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

    也就是说,如果你比较的两个字符串涉及到数字(如:"0"),那么每个字符串都会转换成数字。

    在这里,我不得不说:PHP是最好的语言!

    危害

    当我们的网站是直接MD5Sha1加密而没有加盐,碰巧某用户密码加密涉及到数字,那么就有可能被碰撞破解!

    解决

    1. 在开发过程中尽可能避免使用==判断两个变量的值
    2. 密码加密最好使用password_hash()或者加盐md5($pwd.$salt)
  • 相关阅读:
    nginx常用模块(三)
    Nmap脚本文件分析(AMQP协议为例)
    Nmap脚本引擎原理
    小型Basic编译器问题
    Nmap原理02
    基于Docker搭建GitLab服务器
    关于Telnet使用
    Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑
    Vi文本编辑器
    Linux 奇技淫巧之常用指令
  • 原文地址:https://www.cnblogs.com/yjxing/p/11504939.html
Copyright © 2020-2023  润新知