30 余种加密编码类型的密文特征分析,差点挂在第四面
www.ttmd5.com(带批量解密工具)
Base64、Base58、Base32、Base16、Base85、Base100 等相似加密类型
===================================================================================================================
一般情况下密文尾部都会有两个等号,明文很少的时候则没有
Base64 编码要求把 3 个 8 位字节(3_8=24)转化为 4 个 6 位的字节(4_6=24),之后在 6 位的前面补两个 0,形成 8 位一个字节的形式。 如果剩下的字符不足 3 个字节,则用 0 填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现 1 或 2 个‘=’,如图。
为了保证所输出的编码位可读字符,Base64 制定了一个编码表,以便进行统一转换。编码表的大小为 2^6=64,这也是 Base64 名称的由来。
Base64 编码表
| 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | A | 8 | I | 16 | Q | 24 | Y | 32 | g | 40 | o | 48 | w | 56 | 4 |
| 1 | B | 9 | J | 17 | R | 25 | Z | 33 | h | 41 | p | 49 | x | 57 | 5 |
| 2 | C | 10 | K | 18 | S | 26 | a | 34 | i | 42 | q | 50 | y | 58 | 6 |
| 3 | D | 11 | L | 19 | T | 27 | b | 35 | j | 43 | r | 51 | z | 59 | 7 |
| 4 | E | 12 | M | 20 | U | 28 | c | 36 | k | 44 | s | 52 | 0 | 60 | 8 |
| 5 | F | 13 | N | 21 | V | 29 | d | 37 | l | 45 | t | 53 | 1 | 61 | 9 |
| 6 | G | 14 | O | 22 | W | 30 | e | 38 | m | 46 | u | 54 | 2 | 62 | + |
| 7 | H | 15 | P | 23 | X | 31 | f | 39 | n | 47 | v | 55 | 3 | 63 | / |
一、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 的字节(3_8 = 4_6 = 24),然后把 6Bit 再添两位高位 0,组成四个 8Bit 的字节,也就是说,转换后的字符串理论上将要比原来的长 1/3。
四、Base64 转换总结
Base64 转换,最好是不要用在加密上,尤其是参数加密,很容易出问题。
它最大的特点是没有等号
Base58 是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生 Bitcoin 的钱包地址。
相比 Base64,Base58 不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。
比特币的 Base58 字母表:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
简单的说:Base58 一种编码方式,跟十进制,十六进制一样,不过更短更省空间。
Base58 的原理是什么?
二进制:0 和 1
十进制:1 到 10
十六进制:十进制的基础上加上了 A-F 六个字母
Base58 可以理解为一种 58 进制。
Base58 包含了阿拉伯数字、小写英文字母,大写英文字母。
但是去掉了一些容易混淆的数字和字母:0(数字 0)、O(o 的大写字母)、l( L 的小写字母)、I(i 的大写字母)
3、Base32——示例GEZDGNBVGY3TQOJQGE======
他的特点是明文超过十个后面就会有很多等号
Base32 使用了 ASCII 编码中可打印的 32 个字符(大写字母 AZ 和数字 27)对任意字节数据进行编码.Base32 将串起来的二进制数据按照 5 个二进制位分为一组,由于传输数据的单位是字节(即 8 个二进制位).所以分割之前的二进制位数是 40 的倍数(40 是 5 和 8 的最小公倍数).如果不足 40 位,则在编码后数据补充"=",一个"="相当于一个组(5 个二进制位),编码后的数据是原先的 8/5 倍.
Base32 编码表
| 值 | 符号 | 值 | 符号 | 值 | 符号 | 值 | 符号 |
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
| 0 | A | 8 | I | 16 | Q | 24 | Y |
| 1 | B | 9 | J | 17 | R | 25 | Z |
| 2 | C | 10 | K | 18 | S | 26 | 2 |
| 3 | D | 11 | L | 19 | T | 27 | 3 |
| 4 | E | 12 | M | 20 | U | 28 | 4 |
| 5 | F | 13 | N | 21 | V | 29 | 5 |
| 6 | G | 14 | O | 22 | W | 30 | 6 |
| 7 | H | 15 | P | 23 | X | 31 | 7 |
| 填充 | = | | | | | | |
Base32 将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足 8 比特高位补 0)串联起来,按照 5 比特一组进行切分,并将每组二进制值转换成十进制来对应 32 个可打印字符中的一个。
由于数据的二进制传输是按照 8 比特一组进行(即一个字节),因此 Base32 按 5 比特切分的二进制数据必须是 40 比特的倍数(5 和 8 的最小公倍数)。例如输入单字节字符“%”,它对应的二进制值是“100101”,前面补两个 0 变成“00100101”(二进制值不足 8 比特的都要在高位加 0 直到 8 比特),从左侧开始按照 5 比特切分成两组:“00100”和“101”,后一组不足 5 比特,则在末尾填充 0 直到 5 比特,变成“00100”和“10100”,这两组二进制数分别转换成十进制数,通过上述表格即可找到其对应的可打印字符“E”和“U”,但是这里只用到两组共 10 比特,还差 30 比特达到 40 比特,按照 5 比特一组还需 6 组,则在末尾填充 6 个“=”。填充“=”符号的作用是方便一些程序的标准化运行,大多数情况下不添加也无关紧要,而且,在 URL 中使用时必须去掉“=”符号。
与 Base64 相比,Base32 具有许多优点:
适合不区分大小写的文件系统,更利于人类口语交流或记忆。
结果可以用作文件名,因为它不包含路径分隔符 “/”等符号。
排除了视觉上容易混淆的字符,因此可以准确的人工录入。(例如,RFC4648 符号集忽略了数字“1”、“8”和“0”,因为它们可能与字母“I”,“B”和“O”混淆)。
排除填充符号“=”的结果可以包含在 URL 中,而不编码任何字符。
Base32 也比 Base16 有优势:
Base32 比 Base16 占用的空间更小。(1000 比特数据 Base32 需要 200 个字符,而 Base16 则为 250 个字符)
Base32 的缺点:
Base32 比 Base64 多占用大约 20%的空间。因为 Base32 使用 8 个 ASCII 字符去编码原数据中的 5 个字节数据,而 Base64 是使用 4 个 ASCII 字符去编码原数据中的 3 个字节数据。
它的特点是没有等号并且数字要多于字母
Base16 编码的方式:
1.将数据(根据 ASCII 编码,UTF-8 编码等)转成对应的二进制数,不足 8 比特位高位补 0。然后将所有的二进制全部串起来,4 个二进制位为一组,转化成对应十进制数。
2.根据十进制数值找到 Base16 编码表里面对应的字符。Base16 是 4 个比特位表示一个字符,所以原始是 1 个字节(8 个比特位)刚好可以分成两组,也就是说原先如果使用 ASCII 编码后的一个字符,现在转化成两个字符。数据量是原先的 2 倍。
| 值 | 编码 | 值 | 编码 |
| :-- | :-- | :-- | :-- |
| 0 | 0 | 8 | 8 |
| 1 | 1 | 9 | 9 |
| 2 | 2 | 10 | A |
| 3 | 3 | 11 | B |
| 4 | 4 | 12 | C |
| 5 | 5 | 13 | D |
| 6 | 6 | 14 | E |
| 7 | 7 | 15 | F |
Base16 编码是一个标准的十六进制字符串(注意是字符串而不是数值),更易被人类和计算机使用,因为它并不包含任何控制字符,以及 Base64 和 Base32 中的“=”符号。
5、Base85——示例@:X4hDWe0rkE(G[OdP4CT]N#
特点是奇怪的字符比较多,但是很难出现等号
特点就是一堆 Emoji 表情
Base100 编码/解码工具(又名:Emoji 表情符号编码/解码),可将文本内容编码为 Emoji 表情符号;同时也可以将编码后的 Emoji 表情符号内容解码为文本。
常用解密网站:
Base64:
Base58:www.metools.info
Base32、16:www.qqxiuzi.cn
Base100:www.atoolbox.net
AES、DES、RC4、Rabbit、Triple DES(3DES)
=====================================================================================================
这些算法都可以引入密钥,密文特征与 Base64 类似,明显区别是秘文里+
比较多,并且经常出现/
常用解密网站:
Unicode、HTML 实体编码、16 进制 Unicode
==============================================================================================
1、Unicode——汉字示例这
、字母示例t
、数字符号示例5
可以说 Unicode 与 HTML 实体编码是一个东西
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990 年开始研发,1994 年正式公布。
字符实体是用一个编号写入 HTML 代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。
这么做的目的主要有两个:
1、解决 HTML 代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是 HTML 的预留标签,可能会被误解析。这时就需要将小于号和大于号写成字符实体:
小于号这样写:< 或 <
大于号这样写:> 或 >
前面的写法称为实体名称,后面的写法则是实体编号。ISO-8859-1字符集(西欧语言)中两百多个字符设定了实体名称,而对于其它所有字符都可以用实体编号来代替。
2、网页编码采用了特定语言的编码,却需要显示来自其它语言的字符。例如,网页编码采用了西欧语言 ISO-8859-1,却要在网页中显示中文,这时必须将中文字符以实体形式写入 HTML 代码中。
2、16 进制 Unicode——示例\u8fd9\u662f\u4e00
常用解密网站:
Unicode:www.sojson.com
16 进制 Unicode:www.msxindl.com
HTML 字符实体:www.qqxiuzi.cn
Escape 编码/加密、Unescape 解码/解密、%u 编码、%u 解码
=====================================================================================================
特征:以%u
开头
Escape/Unescape 加密解码/编码解码,又叫 %u 编码,从以往经验看编码字符串出现有"u",它是 unicode 编码,那么 Escape 编码采用是那一种 unicode 实现形式呢。其实是 UTF-16BE 模式。这样一来问题非常简单了。 Escape 编码/加密,就是字符对应 UTF-16 16 进制表示方式前面加 %u。Unescape 解码/解密,就是去掉"%u"后,将 16 进制字符还原后,由 utf-16 转码到自己目标字符。如:字符“中”,UTF-16BE 是:“6d93”,因此 Escape 是“%u6d93”,反之也一样!因为目前 %字符,常用作 URL 编码,所以 %u 这样编码已经逐渐被废弃了!
基本类型只对汉字进行编码,复杂类型是所有字符均可
常用解密网站:
http://web.chacuo.net/charsetescape/
===========================================================================
这两种加密的密文是一样的,不同的是当你用 url 编码网站时是不会把 http 进行编码的,而 Hex 编码则全部转化了
encodeURIComponent() 函数 与 encodeURI() 函数的区别
请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
常用解密网站:
Hex 编码:https://www.107000.com/T-Hex
URL 编码:https://www.sojson.com/encodeurl.html
============================================================================================
这几类密码原理都是移位调换加密,破解难度低
1、凯撒密码——示例iodj{khoor_zrug_123}
只对字母进行加密,常用于 CTF 比赛中
凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码。此为一种位移加密手段,只对 26 个(大小写)字母进行位移加密,规则相当简单,容易被破解。下面是明文字母表移回 3 位的对比:
明文字母表 X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
密文字母表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
然后 A 变成 D,B 变成 E,Z 变成 C。
字母最多可移动 25 位(按字母表)。通常为向后移动,如果您想向前移动 1 位,则相当于向后移动 25 位,位移选择为 25 位。
2、维吉尼亚密码——示例fmcg{iglmq_wptd_123}
可以说是凯撒密码的加强版,引入了密钥
维吉尼亚密码,它将凯撒密码的所有 26 种排列放到一个表中,形成 26 行 26 列的加密字母表。此外,维吉尼亚密码必须有一个由字母组成的密钥,至少有一个字母,最多与明文字母有相同数量的字母。
在凯撒密码中,每个字母都会进行一定偏移值转换,例如,当偏移值是 3 时,则 B 被转换为 E,C 转换成 F…。在维吉尼亚密码加密中,则是由具有不同偏移的凯撒密码构成的。
要生成密码,需要使用表格方法,此表(如图所示)包含 26 行字母表,每一行从上一行到左行被一位偏移。加密时使用哪一行字母表是基于密钥的,在加密过程中密钥会不断变化。
例如,假设明文为:
BTTACKATDAFG
选择一个关键字并重复它以获得密钥,例如,当关键字是 LIMN 时,键是:
LIMNLIMNLIMN
在明文中的第一个字母 B,对应于密钥中的第一个字母 L,使用加密字母表中的 L 行字母进行加密,得到第一个字母的密文 M。同样,第二个明文字母是 T,它用表中的 I 行加密,得到第二个密文 B。通过类比,我们可以得到:
明文:BTTACKATDAFG 键:LIMNLIMNLIMN 密文:MBFNNSMGOIRT
解密的过程是加密的逆过程。例如,密钥的第一个字母对应的 L 行字母表,发现密文的第一个字母 M 位于 B 列,因此明文的第一个字母是 B。密钥的第二个字母对应于 I 行字母表,而密文的第二个字母 B 位于该行的 T 列中,因此明文的第二个字母是 T。等等,你可以得到明文。
栅栏密码是按一定规则将明文内容互相调换了位置
栅栏密码(Rail fence Cipher)基础型加密方式,是一种简单的移动字符位置的加密方法,首先把加密的明文分成 N 个一组,然后把每组的第 1、第 2、第 M 个字符连起来,形成无规律的密文字符串。
例如字符串“123456789abc”,首先将字符串分成 3 组,如下排列:
1234
5678
9abc
依次取每一组字符,组成加密后密文:“15926a37b48c”。
栅栏密码 W 型加密算法:
栅栏密码(Rail fence Cipher),扩展变种 W 型,采用先把明文类似"W"形状进行排列,然后再按栏目顺序 1-N,取每一栏的所有字符值,组成加密后密文。
比如字符串“123456789”,采用栏目数为 3 的时,明文将采用如下排列:
1—5---9
-2-4-6-8-
–3----7–
取每一栏所有字符串,组成加密后密文:“159246837”。
W 型栅栏密码加密方式,比传统型栅栏密码加密方法,算法略有增强,但目前已只能用于学习算法验证。
常用解密网站:
凯撒密码:www.qqxiuzi.cn
维吉尼亚密码:www.metools.info
栅栏密码基础性:www.metools.info
栅栏密码 W 型:www.metools.info
常用解密网站:
=============================================================================
特征:加密过的密文会比原文的字节数多,当你按删除键的时候会发现某一处要按好多下才能把前面的字删掉
原理**:它的原理是在密文中加入了不可见字符组成的编码,例如上述看似九个字符的一句话,通过字数查询可知它实际上有 87 个字符,多出的字符是由零宽空格实现的编码,因为零宽空格不占据空间,所以看不出它的存在。
使用:在进行文本隐藏加密时,将需要隐藏的文字写在括号中,就像这样“你好(有才华),我好喜欢你(画的画)!”,然后加密即可隐藏括号内的文字。同时可以设定一个密码,这样只有知道密码的人才能解密隐藏的文字。密码可以是数字、字母和下划线,最多九位。
这是加密后的字节数
这是本来的字节数
特征:解密后明文与密文会分开显示,密文一般隐藏在第一个字后面,不信你试试,保证你十下之内删不完
与上面文本隐藏加密的原理一样,但过程不一样
这里加密过的密文在文本隐藏加密中解不出来
常用解密网站:
文本隐藏加密:www.qqxiuzi.cn
零宽隐写:yuanfux.github.io
=========================================================================
这类加密都是特征性比较强的,易辨别
特点:只能对字母加解密并且符号无法复制,粘贴后会直接显示明文
猪圈密码(亦称朱高密码、共济会暗号、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码,曾经是美国内战时盟军使用的密码,目前仅在密码教学、各种竞赛中使用。
常用解密网站:
http://www.metools.info/code/c90.html
特点:就是你看不懂的佛语
常用解密网站:
最后
Python 崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS 等更加高级的领域。Python 可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python 可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
??Python 所有方向的学习路线??
Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
??Python 必备开发工具??
工欲善其事必先利其器。学习 Python 常用的开发软件都在这里了,给大家节省了很多时间。
??Python 全套学习视频??
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
??实战案例??
学 python 就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习 python 的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
??大厂面试真题??
我们学习 Python 必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
评论