写点什么

30 余种加密编码类型的密文特征分析,差点挂在第四面

作者:程序媛可鸥
  • 2022 年 3 月 19 日
  • 本文字数:7450 字

    阅读完需:约 24 分钟


Base64、Base58、Base32、Base16、Base85、Base100 等相似加密类型


===================================================================================================================


1、Base64——示例YWRtaW4tcm9vdA==




一般情况下密文尾部都会有两个等号,明文很少的时候则没有


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 使用注意问题



一、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 转换,最好是不要用在加密上,尤其是参数加密,很容易出问题。


2、Base58——示例6tmHCZvhgfNjQu




它最大的特点是没有等号


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 个字节数据。


4、Base16——示例61646D696E




它的特点是没有等号并且数字要多于字母


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#




特点是奇怪的字符比较多,但是很难出现等号



6、Base100——示例??????????




特点就是一堆 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 年正式公布。



2、HTML 实体编码——示例与 Unicode 相同




字符实体是用一个编号写入 HTML 代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。


这么做的目的主要有两个:


1、解决 HTML 代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是 HTML 的预留标签,可能会被误解析。这时就需要将小于号和大于号写成字符实体:


小于号这样写:< 或 <


大于号这样写:> 或 >


前面的写法称为实体名称,后面的写法则是实体编号。ISO-8859-1字符集(西欧语言)中两百多个字符设定了实体名称,而对于其它所有字符都可以用实体编号来代替。


2、网页编码采用了特定语言的编码,却需要显示来自其它语言的字符。例如,网页编码采用了西欧语言 ISO-8859-1,却要在网页中显示中文,这时必须将中文字符以实体形式写入 HTML 代码中。



2、16 进制 Unicode——示例\u8fd9\u662f\u4e00




常用解密网站:


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、Hex 编码


===========================================================================


这两种加密的密文是一样的,不同的是当你用 url 编码网站时是不会把 http 进行编码的,而 Hex 编码则全部转化了


encodeURIComponent() 函数 与 encodeURI() 函数的区别


请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。




常用解密网站:

Hex 编码:https://www.107000.com/T-Hex


URL 编码:https://www.sojson.com/encodeurl.html


凯撒密码、维吉尼亚密码、栅栏密码基础型、栅栏密码 W 型


============================================================================================


这几类密码原理都是移位调换加密,破解难度低


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。等等,你可以得到明文。




3、栅栏密码基础型




栅栏密码是按一定规则将明文内容互相调换了位置


栅栏密码(Rail fence Cipher)基础型加密方式,是一种简单的移动字符位置的加密方法,首先把加密的明文分成 N 个一组,然后把每组的第 1、第 2、第 M 个字符连起来,形成无规律的密文字符串。


例如字符串“123456789abc”,首先将字符串分成 3 组,如下排列:


1234


5678


9abc


依次取每一组字符,组成加密后密文:“15926a37b48c”。



4、栅栏密码 W 型




栅栏密码 W 型加密算法:


栅栏密码(Rail fence Cipher),扩展变种 W 型,采用先把明文类似"W"形状进行排列,然后再按栏目顺序 1-N,取每一栏的所有字符值,组成加密后密文。


比如字符串“123456789”,采用栏目数为 3 的时,明文将采用如下排列:


1—5---9


-2-4-6-8-


–3----7–


取每一栏所有字符串,组成加密后密文:“159246837”。


W 型栅栏密码加密方式,比传统型栅栏密码加密方法,算法略有增强,但目前已只能用于学习算法验证。


常用解密网站:

常用解密网站:

文本隐藏加密、零宽隐写


=============================================================================


1、文本隐藏加密







特征:加密过的密文会比原文的字节数多,当你按删除键的时候会发现某一处要按好多下才能把前面的字删掉


原理**:它的原理是在密文中加入了不可见字符组成的编码,例如上述看似九个字符的一句话,通过字数查询可知它实际上有 87 个字符,多出的字符是由零宽空格实现的编码,因为零宽空格不占据空间,所以看不出它的存在。


使用:在进行文本隐藏加密时,将需要隐藏的文字写在括号中,就像这样“你好(有才华),我好喜欢你(画的画)!”,然后加密即可隐藏括号内的文字。同时可以设定一个密码,这样只有知道密码的人才能解密隐藏的文字。密码可以是数字、字母和下划线,最多九位。



这是加密后的字节数



这是本来的字节数



2、零宽隐写




特征:解密后明文与密文会分开显示,密文一般隐藏在第一个字后面,不信你试试,保证你十下之内删不完


与上面文本隐藏加密的原理一样,但过程不一样



这里加密过的密文在文本隐藏加密中解不出来


常用解密网站:

文本隐藏加密:www.qqxiuzi.cn


零宽隐写:yuanfux.github.io


特殊暗号类加密


=========================================================================


这类加密都是特征性比较强的,易辨别


1、猪圈密码




特点:只能对字母加解密并且符号无法复制,粘贴后会直接显示明文


猪圈密码(亦称朱高密码、共济会暗号、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码,曾经是美国内战时盟军使用的密码,目前仅在密码教学、各种竞赛中使用。


常用解密网站:

http://www.metools.info/code/c90.html


2、与佛论禅




特点:就是你看不懂的佛语


常用解密网站:

最后

Python 崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS 等更加高级的领域。Python 可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python 可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

??Python 所有方向的学习路线??

Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。


??Python 必备开发工具??

工欲善其事必先利其器。学习 Python 常用的开发软件都在这里了,给大家节省了很多时间。


??Python 全套学习视频??

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。


??实战案例??

学 python 就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。


因此在学习 python 的过程中一定要记得多动手写代码,教程只需要看一两遍即可。


??大厂面试真题??

我们学习 Python 必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。



用户头像

Python编程资料加Q群免费领取:419829237 2022.03.14 加入

还未添加个人简介

评论

发布
暂无评论
30余种加密编码类型的密文特征分析,差点挂在第四面_Python_程序媛可鸥_InfoQ写作平台