php – Hash

PS:Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。MD5,SHA-1是常用SHA算法!

  1. md5加密

            $data = "Hello World";
            $hash = md5($data);
            echo $hash; //32位 b10a8db164e0754105b7a99be72e3fe5
            

    使用md5()运算出来的结果总是32个字符的字符串(md5() 第二个参数设置true,将得到16个字符的散列值),不过它只包含16进制的字符。
    你可以使用md5()来处理很长的字符串和数据,但是你始终得到的是一个固定长度的hash值,不同的输入可能会散列成相同的输出,这也可能可以帮助你理解为什么这个函数是“单向”的。
    提示:md5散列值16位和32区别及其破解难易
    16位加密就是从32位MD5散列中把中间16位提取出来,破解16位MD5散列要比破解32位MD5散列还慢,因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比,而破解32位的则不需要,加密后直接对比就可以了

            $data = "Hello World";
            $hash = md5($data);
            echo $hash; //32位 b10a8db164e0754105b7a99be72e3fe5
            $hash = substr(md5($data),8,16);
            echo $hash; //16位 64e0754105b7a99b
            
  2. crc32加密

    这种算法产生一个32位的整数作为hash结果,这意味着只有2^32 (即4,294,967,296) 种可能的输出结果.

            echo crc32('supersecretpassword');
            // outputs: 323322056
            echo crc32('MTIxMjY5MTAwNg==');
            // outputs: 323322056
            

    现在一个稍强一点的家用PC机就可以一秒钟运行十亿次hash函数,所以我们需要一个能产生更大范围的结果的hash函数。比如md5()就更合适一些,它可以产生128位的hash值,也就是有340,282,366,920,938,463,463,374,607,431,768,211,456种可能的 输出。
    sha1()是一个更好的替代方案,因为它产生长达160位的hash值
    提示:尽管crc32的hash概率相比md5高,但是可以在存储中作为”中介键值”,数字型查询永远都比相同长度字符串查询快很多

  3. sha1加密

    返回值是一个 40 字符长度的十六进制数字

            $data = "Hello World";
            $hash = sha1($data);
            echo $hash; //40位 0a4d55a8d778e5022fab701977c5d840bbc486d0
            


参考:
1.php – Hash函数理解,增强密码安全
2.md5 16位加密和32位加密的区别

200-120
210-260
200-310
SY0-401
810-403
300-320
400-101
70-533
N10-006
MB2-707
210-060
400-201
350-018
ADM-201
CISSP
1Z0-060
400-051
300-075
MB2-704
100-101
9L0-012
642-999
300-115
MB5-705
70-461
1V0-601
300-206
352-001
70-486
300-135
NS0-157
PR000041
300-101
70-346
CCA-500
70-480
300-208
70-462
EX200
1Z0-803
EX300
ICBB
1Z0-808
AWS-SYSOPS
1Z0-434
300-070
CAS-002
220-801
SSCP
PMP
642-997
70-410
101-400
ITILFND
AX0-100
2V0-621
102-400
101
1Z0-067
220-802
70-463
C_TAW12_731
70-494
CISM
700-501
NSE4
NSE7
70-483
70-488
相关文章
  1. $_GET,$_POST与urldecode的使用风险
  2. yii2框架的错误处理
  3. Yii2过滤器-behaviors()行为调用
  4. 密码保护:PHP多进程编程
  5. 全排列算法原理和实现
  6. PHP静态方法和非静态方法的使用场景
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in php, 加密解密算法, 编程语言
Comments are closed.