php中hash比较缺陷

php中hash比较缺陷

哈希算法(Hash Algorithm)又称散列算法、散列函数、哈希函数,哈希算法主要有MD4MD5SHA

php中处理hash时的缺陷

我们比较 hash字符串的时候,常常用到 等于( == )、不等于( != )来进行比较

一个hash的值如果是以0e开头,并且后面全是数字的话,在php中这种特殊的hash(也就是所谓的Magic Hash),会被解析为科学计数法0 x 10^n,即和0相等

所以如果两个不同的密码经过哈希以后,其哈希值都是以0e开头的,那么php将会认为他们相同,都是0

此外,0 == 字符会被认为是正确的,可以绕过验证

强弱类型比较

  • == 弱类型比较中,字符'0e123'和字符'0e456'虽然是字符类型,但是因为 == 比较不比较数据类型,只比较值,结果都是0,所以相等,返回true
  • === 强类型比较中,字符'0e123'和字符'0e456'在比较数据类型的时候就被当作字符类型,而字符'0e123'和字符'0e456'当然不相等,所以返回false

这种缺陷在PHP程序中使用哈希算法加密(如md5md4SHA1等)进行有关强弱类型比较的地方很容易被用来进行绕过,在CTF题目中算是比较常见的

Magic Hashes

  • hash以0e开头
    • MD5
    Plaintext MD5 Hash
    240610708 0e462097431906509019562988736854
    QLTHNDT 0e405967825401955372549139051580
    QNKCDZO 0e830400451993494058024219903391
    PJNPDWY 0e291529052894702774557631701704
    NWWKITQ 0e763082070976038347657360817689
    NOOPCJF 0e818888003657176127862245791911
    MMHUWUV 0e701732711630150438129209816536
    MAUXXQC 0e478478466848439040434801845361
    IHKFRNS 0e256160682445802696926137988570
    GZECLQZ 0e537612333747236407713628225676
    GGHMVOE 0e362766013028313274586933780773
    GEGHBXL 0e248776895502908863709684713578
    EEIZDOI 0e782601363539291779881938479162
    DYAXWCA 0e424759758842488633464374063001
    DQWRASX 0e742373665639232907775599582643
    BRTKUJZ 00e57640477961333848717747276704
    ABJIHVY 0e755264355178451322893275696586
    aaaXXAYW 0e5408536224001604
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值