常见加密编码及特征分析
MD5
示例
- 值:password
- MD5 32位小写:5f4dcc3b5aa765d61d8327deb882cf99
- MD5 32位大写:5F4DCC3B5AA765D61D8327DEB882CF99
- MD5 16位小写:5aa765d61d8327de
- MD5 16位大写:5AA765D61D8327DE
原理
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
总体流程如下图所示,每次的运算都由前一轮的128位结果值和当前的512bit值进行运算。
特征
一般情况下,MD5的值为32位,16位值则取MD5。 32位中的第8至24位,MD5由数字“0-9”和字母“a-f”所组成的字符串。如果出现这个范围以外的字符则说明这可能是一个错误的MD5值,就没有必要再拿去解密了。
拓展
- md5(md5($pass)):第一次加密后,将结果转换成小写,对结果再加密一次。
- md5(md5(md5($pass))):第一次加密后,将结果转换成小写,对结果再加密一次,再将结果转换成小写,对结果再加密一次。
- MD5(MD5($pass)):第一次加密后,将结果转换成大写,对结果再加密一次。
- MD5(MD5(MD5($pass))):第一次加密后,将结果转换成大写,对结果再加密一次,再将结果转换成大写,对结果再加密一次。
SHA-1
示例
- 值:password
- SHA-1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
简介
SHA-1是一种密码散列函数,由美国国家安全局设计,并由美国国家标准技术研究所发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
特征
SHA1的特征与MD5相似,不过长度为40位。
相似加密类型
# | 算法 | 长度 |
---|---|---|
1 | md5 | 32/16 |
2 | sha1 | 40 |
3 | sha256 | 64 |
4 | sha512 | 128 |
5 | adler32 | 8 |
6 | crc32 | 8 |
7 | crc32b | 8 |
8 | fnv132 | 8 |
9 | fnv164 | 16 |
10 | fnv1a32 | 8 |
11 | fnv1a64 | 16 |
12 | gost | 64 |
13 | gost-crypto | 64 |
14 | haval128,3 | 32 |
15 | haval128,4 | 32 |
16 | haval128,5 | 32 |
17 | haval160,3 | 40 |
18 | haval160,4 | 40 |
19 | haval160,5 | 40 |
20 | haval192,3 | 48 |
21 | haval192,4 | 48 |
22 | haval192,5 | 48 |
23 | haval224,3 | 56 |
24 | haval224,4 | 56 |
25 | haval224,5 | 56 |
26 | haval256,3 | 64 |
27 | haval256,4 | 64 |
28 | haval256,5 | 64 |
29 | joaat | 8 |
30 | md2 | 32 |
31 | md4 | 32 |
32 | ripemd128 | 32 |
33 | ripemd160 | 40 |
34 | ripemd256 | 64 |
35 | ripemd320 | 80 |
36 | sha224 | 56 |
37 | sha3-224 | 56 |
38 | sha3-256 | 64 |
39 | sha3-384 | 96 |
40 | sha3-512 | 128 |
41 | sha384 | 96 |
42 | sha512/224 | 56 |
43 | sha512/256 | 64 |
44 | snefru | 64 |
45 | snefru256 | 64 |
46 | tiger128,3 | 32 |
47 | tiger128,4 | 32 |
48 | tiger160,3 | 40 |
49 | tiger160,4 | 40 |
50 | tiger192,3 | 48 |
51 | tiger192,4 | 48 |
52 | whirlpool | 128 |
53 | mysql | 16 |
54 | mysql5 | 40 |
55 | NTLM | 32 |
56 | DCC | 32 |
HTML字符实体
示例
- 值:password
- HTML字符实体 10进制:p ;a ;s ;s ;w ;o ;r ;d ;
- HTML字符实体 16进制:p ;a ;s ;s ;w ;o ;r ;d ;
特征
10进制:每个字符都对应一个以&#开头的字符串。
16进制:每个字符都对应一个以&#x开头的字符串。
Unicode 16进制
示例
- 值:password
- Unicode 16进制:\u0070\u0061\u0073\u0073\u0077\u006f\u0072\u0064
特征
每个字符都对应一个以\u开头的字符串。
Base族
Base64
示例
- 值:password
- Base64:cGFzc3dvcmQ=
特征
一般情况下密文尾部都会有1~2个等号,明文很少的时候则没有。
使用注意问题
一、Base64和URL传参问题
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充’=’号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
二、Base64和URL传参问题改善
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“-”或“. ”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
三、Base64转换后比原有的字符串长1/3
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 4 6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
四、Base64转换总结
Base64转换,最好是不要用在加密上,尤其是参数加密,很容易出问题。
Base58
示例
- 值:password
- Base58:KoEXfKoUyfH
特征
最大特征就是没有等号
Base32
示例
- 值:password
- Base32:OBQXG43XN5ZGI===
特征
明文如果比较多那么等号也会较多
Base16
示例
- 值:password
- Base16:70617373776f7264
特征
相较于Base一族,Base16没有等号,并且数字一般要多于字母。
Base85
示例
- 值:password
- Base85:E+*g/GAhM4
特征
杂乱的符号比较多,但是很难出现等号。
Base100
示例
- 值:password
- Base100:不支持显示
特征
加密之后是一堆Emoji表情,不过我的博客字体不支持显示Emoji,还是看图片吧。
声明
主要参考文献来自:CSDN,WIKI百科,百度百科