Crypto-常用编码(持续更新)
1.凯撒密码
凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
1.固定密钥:(密钥往往通过遍历获得)
1 | 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG //密钥为3 |
2.密钥不定:
1 | 密文:s0a6u3u1s0bv1a |
2.Atbash Cipher(移位密码)
它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样出现的:
1 | 明文: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 |
3.简单替换密码
将每个明文字母替换为与之唯一对应且不同的字母
1 | 明文字母 : abcdefghijklmnopqrstuvwxyz |
破解方法:
可以利用quipquip网站进行暴力解密:
quipqiup - cryptoquip and cryptogram solver
4.仿射密码(特点在于只有 26 个英文字母)
仿射密码的加密函数是
1 | E(x)=(ax+b)(modm) |
- x 表示明文按照某种编码得到的数字
- a 和 m 互质
- m 是编码系统中字母的数目。
解密函数是
1 | D(x)=a−1(x−b)(modm) |
其中 a−1 是 a 在 Zm群的乘法逆元。
5.Playfair 密码
选取一串英文字母,除去重复出现的字母,将剩下的字母逐个逐个加入 5 × 5 的矩阵内,剩下的空间由未加入的英文字母依 a-z 的顺序加入。注意,将 q 去除,或将 i 和 j 视作同一字。
将要加密的明文分成两个一组。若组内的字母相同,将 X(或 Q)加到该组的第一个字母后,重新分组。若剩下一个字,也加入 X 。
在每组中,找出两个字母在矩阵中的地方。
1.若两个字母不同行也不同列,在矩阵中找出另外两个字母(第一个字母对应行优先),使这四个字母成为一个长方形的四个角。
2.若两个字母同行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。
3.若两个字母同列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。
例:
以 playfair example 为密匙,得
1 | P L A Y F |
1 | HI DE TH EG OL DI NT HE TR EX ES TU MP //明文 |
6.棋盘密码(特点:两两一组,且种类不超过5)
1.12345密码表:
2.ADFGX密码表:
例:
1 | HELLO //明文 |
7.维吉尼亚密码
首先,对密钥重复使得与明文等长。
其次,对照维吉尼亚密码表。
1 | 明文:comegreatwall |
解密网站:
8.希尔密码
使用每个字母在字母表中的顺序作为其对应的数字,即 A=0,B=1,C=2 等,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘,再将得出的结果模 26。注意用作加密的矩阵(即密匙)在 Z26n 必须是可逆的,否则就不可能解码。只有矩阵的行列式和 26 互质,才是可逆的。
例:
1 | 明文:ACT |
9.培根密码(题目描述食物可联想)
特点:
- 只含A 和 B
- 每一段的长度为 5
10.栅栏密码
栅栏密码把要加密的明文进行分组,再组合.
1 | 明文:THEREISACIPHER |
11.01248密码(云影密码)
其中 0 用来表示间隔,其他数字以加法可以表示出 如:28=10,124=7,18=9,再用 1->26 表示 A->Z。
特点:只有0,1,2,4,8
首先,按照 0 来进行分割
1 | 明文:8842101220480224404014224202480122 |
12.JSFuck
JSFuck 可以只用 6 个字符 []()!+
来编写 JavaScript 程序。比如我们想用 JSFuck 来实现 alert(1)
代码如下
1 | [][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]][([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]]+([][[]]+[])[+[[+!+[]]]]+(![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[+!+[]]]]+([][[]]+[])[+[[+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])() |
13.BrainFuck
例:
1 | ++++++++++[>+++++++>++++++++++>+++>+<<<<-] |
工具:
14.猪圈密码:
图片对比即可
我们举一个例子,如明文为 X marks the spot
,那么密文如下
WHENXHEPIGWANXXOEAX
whenthepigwanttoeat
工具:
还有另外两种类似:
猪圈密码的变种:
1圣堂武士密码:
15.舞动的小人密码
每一个跳舞的小人实际上对应的是英文二十六个字母中的一个,而小人手中的旗子则表明该字母是单词的最后一个字母,如果仅仅是一个单词而不是句子,或者是句子中最后的一个单词,则单词中最后一个字母不必举旗。
16.键盘密码
1.手机键盘密码
第一种,用两位数字来表示字母,例如:ru 用手机键盘表示就是:7382,那么这里就可以知道了,手机键盘加密方式不可能用 1 开头,第二位数字不可能超过 4
第二种,用数字位数表示第几个数字,位数不超过4,如6对应6的第三个字母o
2.电脑键盘棋盘
电脑键盘棋盘加密,利用了电脑的棋盘方阵。
3.电脑键盘坐标
电脑键盘坐标加密,利用键盘上面的字母行和数字行来加密,例:bye 用电脑键盘 XY 表示就是:351613
有时需考虑被多个字母包围的字母。
4.电脑键盘 QWE
电脑键盘 QWE 加密法,就是用字母表替换键盘上面的排列顺序。
解密脚本:
1 | import argparse |
17.摩斯电码
通常为音频,且只含两种音,靠听力听出停顿或根据图谱停顿。
与电码表对照即可
18.盲文密码
根据盲文进行转换加密
19.甲子年加密
通常需要对甲子年进行ASCII码转换。
20.ASCII码运算加密
通过对ASCII码进行各种运算进行加密。
如:
1 | 97 102 90 95 114 57 86 89 102 83 99 79 101 79 95 85 76 94 82 87 85 99 |
21.当铺密码:
当铺密码 [1] 就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。例如:
王:该字外面有 6 个出头的位置,所以该汉字对应的数字就是 6;
口:该字外面没有出头的位置,那就是0;
人:该字外面有 3 个出头的位置,所以该汉字对应的数字就是 3;
1 | s ='田由中人工大王夫井羊' |
22.转盘密码(也叫转轮机)
字母矩阵注意结果可能在一行中,可能在一列中,也可能有其余情况,需要仔细观察,一般拼接后是单词。
1 | 明文: |
这是一个转盘加密:
比如第一个密钥匙:2、密文匙:H
把转盘第二行单独提出来 2: <KPBELNACZDTRXMJQOYHGVSFUWI <
从H的地方一直剪切,把剪切的内容放在最前面,变成 2: <HGVSFUWIKPBELNACZDTRXMJQOY <
依次类推把14行都按这样的方式整一遍就得到这个:
1 | 2: <HGVSFUWIKPBELNACZDTRXMJQOY < |
结果就在其中。
23.JScript和VBScript脚本加密
具体的密文具体格式目前还不太清楚,应该和下面这个类似,见过一个VBScript脚本加密:
1 | #@~^TgAAAA=='[6*liLa6++p'aXvfiLaa6i[[avWi[[a*p[[6*!I'[6cp'aXvXILa6fp[:6+Wp[:XvWi[[6+XivRIAAA==^#~@ |
工具:
24.Ook加密
密文形式一(常见):
1 | Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. |
密文形式二(不常见):
1 | ..... ..... ..... ..... !?!!. ?.... ..... ..... ..... .?.?! .?... .!... |
25.base编码
1.base64,含大小写((A-Z、a-z、0-9、+、/)),结尾通常含有 “ == ”
2.base32,只含大写(字母A-Z和数字2-7),结尾也含有“ == ”
3.base16,只含(数字0-9和字母A-F)结尾不含“ == ”,但有可能对于 == 的要去掉 == 再base16解密。
base循环爆破:
1 | import base64 |
python3(逐行base64)
1 | import base64 |
多次base64:
1 | import base64 |
base64换表:
1 | import base64 |
1 | 换表加密(如果给的是换表解密后的结果,用加密回逆): |
换表在线网站:
http://web.chacuo.net/netbasex
26.escape编码
escape是对字符串(string)进行编码,作用是让它们在所有电脑上可读,其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码。
编码之后的效果是%XX或者%uXXXX这种形式,可能是\也不会被编码吧,也遇到过这种:\134\170\65\143。
27.html加密
特点:以&#开头,例如:
1 | flag%7Bctf_tfc201717qwe%7D |
通常有3种:
base
MD5加密 (不可逆,无法解密,但能使用撞库的方法来解,就是在存放密文-明文的库中寻找和已知密文对应的密文-明文对,从而找出明文。)
sha1加密
解密网站:https://convertstring.com/zh_CN/EncodeDecode/HtmlDecode
28.银河字母加密
对照银河字母表:
29.ROT编码
ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126
工具:
30.与佛论禅/与熊论道/核心价值观/花朵
与佛论禅: 佛曰: ——————— 解密网站:与佛论禅 (keyfc.net)
与熊论道: 熊曰: ————————— 解密网站:与熊论道/熊曰加密 - PcMoe!
核心价值观: ———– 解密网站:CTF在线工具-在线核心价值观编码|核心价值观编码算法|Core Values Encoder (hiencode.com)
花朵: ❀❀❀ 解密网站:文本加密为花朵符号,可自设密码|文本在线加密解密工具 (qqxiuzi.cn)
31.Unicode编码:
4种格式:
工具:
32.aaencode(颜文字)
aaencode:将JS代码转换成常用的网络表情。直接在控制台就能解密。
例:
1 | ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚] |
加密网站:http://utf-8.jp/public/aaencode.html
同样存在于Unicode中,参考:https://cloud.tencent.com/developer/article/1602547
33.jjencode
将JS代码转换成只有符号的字符串。jjencode可以用自定义的符号对代码进行混淆,并且实际上的效果和加密的效果是一样的,因为如果不知道自定义的符号 key,过程是不可逆的。
工具:
34.xor加密
若得到两串字符串,可以放入010edit获取二进制,进行异或再变换为十六进制,进而变换为ASCII
例题:异性相吸 https://blog.csdn.net/zz_Caleb/article/details/88587238
35.64进制加密
64进制用的是base64的索引表进行的加密:
36.js编码
利用![]{}+组成的编码,可直接控制台解码
1 | [][(![]+[])[!![]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!![]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}[[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+({}[[]]+[])[+[]]+({}+[])[!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[] |
37.幂数加密
二进制数除了0和1的表示方法外,在由二进制转换成十进制的时候,还可以表示成2的N次方的形式。例如:
15=2^0+2^1+2^2+2^3
并且我们发现,任意的十进制数都可以用2^n或2^n+2^m+……的形式表示出来,可以表示的单元数由使用的max n来决定。
可表示的单元数=2^(n+1)-1
二进制幂数加密法就是应用这个原理,由于英文字母只有26个字母,由公式可知,只要2的0、1、2、3、4次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。例如
1 | 明文: d o n o t p u l l a l l y o u r e g g s i n o n e b a s k e t |
38.打印字符编码(也叫URL编码)
特点:=开头和连接
1 | =E5=9C=A8=E6=89=80=E6=9C=89=E9=82=AE=E4=BB=B6=E5=A4=84=E7=90=86=E7=9A=84=E5=90=84=E5=BC=8F=E5=90=84=E6=A0=B7=E7=9A=84=E7=BC=96=E7=A0=81=E4=B8 |
工具:
39.Rabbit加密
形式类似base64
工具:
40.MD5加密
工具:
41.埃特巴什码 - Atbash Cipher
埃特巴什码(Atbash Cipher)是一个系统:最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。
明文: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
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
工具:
42.base64编码表
如得到一串类似base编码,却不能base解码,可尝试base编码表替换。
1 | s= '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG' //密文 |
码表替换:若编码里缺少0-9或其他,并且多出来了一些base64之外的,如)!@#$%^&*(等等,先加这些替换掉再base64解码。
1 | import base64 |
43.十二星座加密
1 | 白羊座 ♈ U+2648(3月21日 - 4月20日) |
分别对应0123456789ab
44.键盘移动
左移或右移,
1 | vtu[ypslg;sh}lrunpstf[sddeptf\ //密文 |
45.AES+emoji加密
描述:带密钥的表情包加密:
工具:
解密网站:
46.零宽字符加密
描述:打开txt文本发现只有少量内容,但下标显示有很多列,即有很多零宽字符看不到。
工具:
47.仓颉编码
描述:多个字母对应一个汉字,重点是中文。
YDHML_QKA_PDK_HVD_NAHI_OQ_K_GR
以下划线分割,每一部分对应一个汉字。
48.八卦编码
描述:震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮
八卦对应二进制表:
1 | c = "震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮" |
49.气泡编码(bubble)
在线解码:CTF在线工具-在线BubbleBabble编码|Bubble编码|BubbleBabble解码|BubbleBabble编码原理|BubbleBabble编码算法 (hiencode.com)
50.关键字密码
题目涉及keyword字样。
在线解码:http://www.hiencode.com/keyword.html
51.Serpent
法语是蛇,与蛇有关的解密。
在线解码:http://serpent.online-domain-tools.com/
52.音符加密
形如:♭♯♪‖¶♬♭♭♪♭‖‖♭♭♬‖♫♪‖♩♬‖♬♬♭♭♫‖♩♫‖♬♪♭♭♭‖¶∮‖‖‖‖♩♬‖♬♪‖♩♫♭♭♭♭♭§‖♩♩♭♭♫♭♭♭‖♬♭‖¶§♭♭♯‖♫∮‖♬¶‖¶∮‖♬♫‖♫♬‖♫♫§=
在线解码:https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue
53.敲击码
敲击码(由两个数字定位一个字母,使用“/”进行字母间的分隔。)
密文:….. ../… ./… ./… ../ 5 2 /3 1/3 1/3 2 / 明文: W L L M
对照表:
54.中文电码
汉字和电码的抓换: 人对应0086
55.五笔编码
同上: 如:也对应bnhn
https://www.qqxiuzi.cn/bianma/wubi.php
56.logo编程
在线解码:https://www.calormen.com/jslogo/
57.提瓦特文字
原神启动!:
58.排列组合
1 | import itertools |