• HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT

rsky

  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT
Quiet主题

常见加密编码及特征分析

rsky
学习笔记

2021-08-20

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进制:&#112 ;&#97 ;&#115 ;&#115 ;&#119 ;&#111 ;&#114 ;&#100 ;
  • HTML字符实体 16进制:&#x70 ;&#x61 ;&#x73 ;&#x73 ;&#x77 ;&#x6F ;&#x72 ;&#x64 ;

特征

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百科,百度百科

上一篇

国内公共DNS收集

下一篇

我在人间凑数的日子

Quiet Theme © 赣ICP备2023006710号