识别密文加密方式

前言

爬虫工程师在做加密参数逆向的时候,经常会遇到各种各样的加密算法、编码、混淆,每个算法都有其对应的特征,对于一些较小的网站,往往直接引用这些官方算法,没有进行魔改等其他操作,这种情况下,如果我们能熟悉常见算法的特征,通过密文就能猜测出使用的哪种算法、编码、混淆,将会大大提高工作效率!在 CTF 中通常也会有密码类的题目,掌握一些常见密文特征也是 CTFer 们必备的技能!

本文将介绍以下编码和加密算法的特征:

  • 编码:Base 系列、Unicode、Escape、URL、Hex;

  • 算法:MD5、SHA 系列、HMAC 系列、RSA、AES、DES、3DES、RC4、Rabbit、SM 系列;

  • 混淆:Obfuscator、JJEncode、AAEncode、JSFuck、Jother、Brainfuck、Ook!、Trivial brainfuck substitution;

  • 其他:恺撒密码、栅栏密码、猪圈密码、摩斯密码、培根密码、维吉尼亚密码、与佛论禅、当铺密码。

PS:常见加密算法原理以及在 Python 和 JavaScript 中的实现方法可参见 K 哥以前的文章:【爬虫知识】爬虫常见加密解密算法

编码系列

Base 系列编码

Base64 是我们最常见的编码,除此之外,其实还有 Base16、Base32、Base58、Base85、Base100 等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意字节数据进行编码,比如 Base64 使用了 64 个可打印字符(A-Z、a-z、0-9、+、/),Base16 使用了 16 个可打印字符(A-F、0-9),这里主要讲怎么快速识别,其具体原理可自行百度,Base 系列主要特征如下:

  • Base16:结尾没有等号,数字要多于字母; 

  • Base32:字母要多于数字,明文数量超过 10 个,结尾可能会有很多等号;

  • Base58:结尾没有等号,字母要多于数字;

  • Base64:一般情况下结尾都会有 1 个或者 2 个等号,明文很少的时候可能没有;

  • Base85:等号一般出现在字符串中间,含有一些奇怪的字符;

  • Base100:密文由 Emoji 表情组成。

示例:

编码类型 示例一 示例二
明文 01234567890 administrators
Base16 3031323334353637383930 61646D696E6973747261746F7273
Base32 GAYTEMZUGU3DOOBZGA====== MFSG22LONFZXI4TBORXXE4Y=
Base58 cX8j8pvGzppMKVb BNF5dFLUTN5XwM1yLoF
Base64 MDEyMzQ1Njc4OTA= YWRtaW5pc3RyYXRvcnM=
Base85 0JP==1c70M3&rY @:X4hDJ=06Eaa'.EcV
Base100 🐧🐨🐩🐪🐫🐬🐭🐮🐯🐰🐧 👘👛👤👠👥👠👪👫👩👘👫👦👩👪

Unicode 编码

Unicode 又称为统一码、万国码、单一码,是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。其主要特征如下:

  • 以 \u&# 或 &#x 开头,后面是数字加字母组合

PS:\u 开头和 &#x 开头是一样的,都是 16 进制 Unicode 字符的不同写法,&# 则是 Unicode 字符 10 进制的写法,此外,&# 和 &#x 开头的,也称为 HTML 字符实体转换,字符实体是用一个编号写入 HTML 代码中来代替一个字符,在 HTML 中,某些字符是预留的,如果希望正确地显示预留字符,就必须在 HTML 源代码中使用字符实体。

示例:

编码类型 示例一 示例二
明文 12345 admin
Unicode \u0031\u0032\u0033\u0034\u0035 \u0061\u0064\u006d\u0069\u006e

Escape 编码

Escape 编码又叫 %u 编码,Escape 编码就是字符对应 UTF-16BE 表示方式前面加 %u,Escape 不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / ,其他所有的字符都会被转义序列替换。其主要特征如下:

  • 以 %u 开头,后面是数字加字母组合

示例:

编码类型 示例一 示例二
明文 K 哥爬虫 我爱 Python
Escape K%u54E5%u722C%u866B %u6211%u7231Python

URL / Hex 编码

URL 和 Hex 编码的结果是一样的,不同的是当你用 URL 编码网址时是不会把 httphttps 关键字和 /?&= 等连接符进行编码的,而 Hex 编码则全部转化了,其主要特征如下:

  • 以 % 开头,后面是数字加字母组合

编码类型 示例
明文 https://www.kuaidaili.com/
Unicode https://%77%77%77%2E%6B%75%61%69%64%61%69%6C%69%2E%63%6F%6D/
Hex %68%74%74%70%73%3a%2f%2f%77%77%77%2e%6b%75%61%69%64%61%69%6c%69%2e%63%6f%6d%2f

加密算法

MD5

MD5 实质是一种消息摘要算法,一个数据的 MD5 值是唯一的,同一个数据不可能计算出多个不同的 MD5 值,但是,不同数据计算出来的 MD5 值是有可能一样的,知道一个 MD5 值,理论上是无法还原出它的原始数据的,MD5 是最容易辨别的,主要特征如下:

  • 密文一般为 16 位或者 32 位,其中 16 位是取的 32 位第 9~25 位的值;

  • 组成方式为字母(a-f)和数字(0-9)混合,字母可以全部是大写或者小写。

除了通过密文特征来判断以外,我们还可以搜索源代码,标准 MD5 的源码里是包含了一些特定的值的,没有这些特定值,就无法实现 MD5:

  • 0123456789ABCDEF0123456789abcdef

  • 1732584193-271733879-1732584194271733878

PS:某些特殊情况下,密文的长度也有可能不止 16 位或者 32 位,有可能是在官方算法上有一些魔改,通常也是在 16 位的基础上,左右填充了一些随机字符串。

示例:

编码类型 示例一 示例二
明文 123456 admin
MD5
(16 位小写)
49ba59abbe56e057 7a57a5a743894a0e
MD5
(16 位大写)
49BA59ABBE56E057 7A57A5A743894A0E
MD5
(32 位小写)
e10adc3949ba59abbe56e057f20f883e 21232f297a57a5a743894a0e4a801fc3
MD5
(32 位大写)
E10ADC3949BA59ABBE56E057F20F883E 21232F297A57A5A743894A0E4A801FC3

SHA 系列

SHA 是比 MD5 更安全一点的摘要算法,SHA 通常指 SHA 家族算法,分别是 SHA-1、SHA-2、SHA-3,其中 SHA-2 是 SHA-224、SHA-256、SHA-384、SHA-512 的并称,SHA-3 是 SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256 的并称,其名字的后缀的数字就代表了结果的大小(bit),注意,SHAKE 算法结果的大小并不是固定的,其他算法特征如下:

  • SHA-1:字母(a-f)和数字(0-9)混合,固定位数 40 位;

  • SHA-224/SHA3-224:字母(a-f)和数字(0-9)混合,固定位数 56 位;

  • SHA-256/SHA3-256:字母(a-f)和数字(0-9)混合,固定位数 64 位;

  • SHA-384/SHA3-384:字母(a-f)和数字(0-9)混合,固定位数 96 位;

  • SHA-512/SHA3-512:字母(a-f)和数字(0-9)混合,固定位数 128 位。

示例:

编码类型 示例
明文 123456
SHA-1 7c4a8d09ca3762af61e59520943dc26494f8941b
SHA-256 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
SHA3-256 c888c9ce9e098d5864d3ded6ebcc140a12142263bace3a23a36f9905f12bd64a

HMAC 系列

HMAC 这种算法就是在 MD5、SHA 两种加密的基础上引入了秘钥,其密文也和 MD5、SHA 类似,密文的长度和使用的 MD5、SHA 算法对应密文的长度是一样的。特征如下:

  • HMAC-MD5:字母(a-f)和数字(0-9)混合,位数一般为 32 位;

  • HMAC-SHA-1:字母(a-f)和数字(0-9)混合,固定位数 40 位;

  • HMAC-SHA-224 / HMAC-SHA3-224:字母(a-f)和数字(0-9)混合,固定位数 56 位;

  • HMAC-SHA-256 / HMAC-SHA3-256:字母(a-f)和数字(0-9)混合,固定位数 64 位;

  • HMAC-SHA-384 / HMAC-SHA3-384:字母(a-f)和数字(0-9)混合,固定位数 96 位;

  • HMAC-SHA-512 / HMAC-SHA3-512:字母(a-f)和数字(0-9)混合,固定位数 128 位。

HMA

  • 18
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值