常见密码和编码总结 CTF中Crypto和Misc必备

2022-09-30 14:26:56 浏览数 (1)


常见密码和编码总结

CTF中Crypto和Misc必备

前言

对常见的编码和密码做个归纳 并记录一些可用的网站和工具 可以当做手册使用

一、常见编码

1、ASCII编码

现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646

可以分作三部分组成 第一部分是:ASCII非打印控制字符 第二部分是:ASCII打印字符; 第三部分是:扩展ASCII打印字符

转换网站 ASCII 在线转换器 ASCII编码转换

2、base64,32编码

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一

  • 基于64个可打印字符来表示二进制数据的方法
  • 3个字节可表示4个可打印字符
  • 如果要编码的字节数不能被3整除:当最后剩余一个八位字节(一个byte)时,最后6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号

加密:

代码语言:javascript复制
>>> import base64
>>> encode = base64.b64encode(b'I love you')
>>> encode
b'SSBsb3ZlIHlvdQ=='

解密:

代码语言:javascript复制
>>> import base64
>>> decode = base64.b64decode(b'SSBsb3ZlIHlvdQ==')
>>> decode
b'I love you'

base32 只有大写字母(A-Z)和数字234567

跟base64相似就是将base64.b 64encode变成base64.b 32encode 加密:

代码语言:javascript复制
>>> import base64
>>> encode = base64.b32encode(b'I love you')
>>> encode
b'JEQGY33WMUQHS33V'

解密:

代码语言:javascript复制
>>> import base64
>>> decode = base64.b32decode(b'JEQGY33WMUQHS33V')
>>> decode
b'I love you'

网站 Base64加密解密 base编码

3、URL编码

url编码又叫百分号编码,是统一资源定位(URL)编码方式 URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过在该字节ascii码的的16进制字符前面加%编码处理

  • js:有encodeURI、encodeURIComponent
  • PHP有 urlencode、urldecode等

url编码和双重编码是绕过时常用手段

网站 UrlEncode编码/解码 URL编码

4、Unicode编码

unicode编码

  • 是一种所有符号的编码,现在的规模可以容纳100多万个符号,https://home.unicode.org/
  • 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储
  • UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式,其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用

UTF-8

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的
  • 于n字节的符号(n > 1),第一个字节的前n位都设为1,第n 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码

二者的转换方式

  • 首先找到该Unicode编号所在的编号范围,进而可以找到与之对应的二进制格式
  • 然后将该Unicode编号转化为二进制数(去掉高位的0)
  • 最后将该二进制数从右向左依次填入二进制格式的X中,如果还有X未填,则设为0

网站 Unicode编码转换

5、HTML实体编码

喜闻乐见的&# HTML 中的预留字符必须被替换为字符实体 一些在键盘上找不到的字符也可以使用字符实体来替换

可参考 HTML 字符实体 HTML 符号实体参考手册 HTML ISO-8859-1 参考手册

网站 在线HTML编码器 HTML编码

6、敲击码

敲击码(Tap code)

  • 一种以非常简单的方式对文本信息进行编码的方法
  • 因该编码对信息通过使用一系列的点击声音来编码而命名
  • 基于5×5方格波利比奥斯方阵来实现的,不同点是用K字母被整合到C中

网站 敲击码

7、摩尔斯电码(摩斯密码)

大名鼎鼎的morse电码

  • 早期的数字化通信形式
  • 不同于现代只使用0和1两种状态的二进制代码
  • 代码包括五种: - 点(.) - 划(-) - 每个字符间短的停顿(在点和划之间的停顿) - 每个词之间中等的停顿 - 句子之间长的停顿

网站 中文摩斯密码 Morse莫尔斯电码加密解密 摩尔斯密码在线翻译 Morse code

8、Quoted-printable编码

Quoted-printable编码

  • 多用途互联网邮件扩展(MIME) 一种实现方式
  • 帮助非ASCII编码的信件传输通过SMTP
  • 每个末编码的二进制字符被编码成三个字符,即一个等号和一个十六进制的数字,如‘=AB’

编码方法

网站 QuotedPrintable编码 Quoted-printable编码

9、XXencode编码

XXencode

  • 将输入文本以每三个字节为单位进行编码
  • 如果最后剩下的资料少于三个字节,不够的部份用0补齐
  • 这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间
  • 以所对应值的位置字符代替。它所选择的可打印字符是: -0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符
  • 跟base64打印字符相比,就是UUencode多一个-”字符,少一个/ 字符

网站 在线XXencode编码 XXencode

10、UUencode编码

UUencode编码

  • 起先用在unix网络中,早期在电子邮件中使用较多
  • 将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用0补齐
  • 三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值,这个数值只会落在0到63之间
  • 然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中

网站 在线UUencode编码 UUencode

11、Escape/Unescape编码

Escape/Unescape

  • 又叫%u编码,采用UTF-16BE模式,16进制表示方式前面加%u
  • 如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“涓”
  • 因为目前%字符,常用作URL编码,所以%u这样编码已经逐渐被废弃了

网站 在线Escape编码/加密 Escape编码

12、md5

md5

  • 被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致
  • 值范围在0-9,a-f

md5碰撞

代码语言:javascript复制
import hashlib

for i in range(10000, 10000001):
    s = hashlib.md5(str(i).encode()).hexdigest()[0:5]
    if s == "5fe45":
        print(i)
        break

网站 CMD5 xmd5

二、换位密码

1、栅栏密码

把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话

以2栏栅栏加密为例

  • 明文:THE LONGEST DAY MUST HAVE AN END
  • 把将要传递的信息中的字母交替排成上下两行。 T E O G S D Y U T A E N N H L N E T A M S H V A E D
  • 密文: 将下面一行字母排在上面一行的后边。 TEOGSDYUTAENN HLNETAMSHVAED

网站 Rail-fence Cipher 栅栏密码

2、简单换位密码

密文k=“3124” 明文m=“flag{easy_easy_crypto}

移位密码首先以k的长度(也就是len(k)=4)切分m,具体如下:

代码语言:javascript复制
flag     {eas    y_ea    sy_c    rypt      o}

总共分成了6个部分,然后按照密钥3124的顺序对每一部分都进行密钥变化。如下是变化规则

变化之后,如下:

代码语言:javascript复制
flag     {eas    y_ea    sy_c    rypt      o}

lafg     ea{s    _eya    y_sc    yprt      }o

所以密文为:lafgea{s _eyay_scyprt}o

3、列移位密码

明文 The quick brown fox jumps over the lazy dog 密钥 how are u

填入5行7列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充) 按how are u在字母表中的出现的先后顺序进行编号,我们就有a为1,e为2,h为3,o为4,r为5,u为6,w为7 所以先写出a列,其次e列,以此类推写出的结果便是密文

密文:qoury inpho Tkool hbxva uwmtd cfseg erjez

网站 Columnar Transposition Cipher 列移位密码

4、曲路密码

事先双方约定密钥(也就是曲路路径) 明文:The quick brown fox jumps over the lazy dog 密文:gesfc inpho dtmwu qoury zejre hbxva lookT

三、替换密码

1、凯撒密码

明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文

明文:The quick brown fox jumps over the lazy dog 偏移量:1 密文:Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz eph

网站 Caesar cipher 凯撒密码

2、ROT5/13/18/47

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,具体可参考ASCII编码,

下面以ROT13以例 明文:the quick brown fox jumps over the lazy dog 密文:gur dhvpx oebja sbk whzcf bire gur ynml qbt

网站 ROT5/13/18/47编码转换 Rot13密码

3、QWE加密

从电脑键盘上的字母从Q开始数,顺序是Q W E R T Y U I… 对应的字母顺序依次是A B C D E F G H 也就是说Q=A,W=B,E=C,依次类推

4、拼音九键加密

利用字母在九键上的位置进行加密 特点:数字为偶数个,且偶数位的数小于5(九键上一个键上的字母最多是四个)

例:335321414374744361715332 两个数为一组分开:33 53 21 41 43 74 74 43 61 71 53 32 对应九键进行查找:3键的第三个字母、5键的第3个字母,以此类推

5、埃特巴什码

以字母倒序排列作为特殊密钥的替换加密,也称也就是下面的对应关系:

代码语言:javascript复制
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

网站 Atbash Cipher 埃特巴什码

6、培根密码

每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由’A’和’B’组成序列替换明文(所以你当然也可以用别的字母)

代码语言:javascript复制
A = aaaaa  I/J = abaaa  R = baaaa
B = aaaab  K = abaab    S = baaab 
C = aaaba  L = ababa    T = baaba
D = aaabb  M = ababb    U/V = baabb
E = aabaa  N = abbaa    W = babaa
F = aabab  O = abbab    X = babab
G = aabba  P = abbba    Y = babba
H = aabbb  Q = abbbb    Z = babbb

网站 Baconian Cipher 培根密码

7、希尔密码

每个字母转换成26进制数字:A=0, B=1, C=2…Z=25 一串字母当成n维向量,跟一个n×n的矩阵相乘 再将得出的结果MOD26

网站 Hill Cipher Cryptanalysis of the Hill Cipher

8、猪圈密码

猪圈密码(Pigpen Cipher或称九宫格密码、朱高密码、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码

网站 The BLACK Chamber 猪圈密码

变种

9、圣堂武士密码

也算是猪圈密码的变种

10、银河字母

11、维吉尼亚密码

维吉尼亚密码(Vigenère Cipher) 在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密钥(循环使用,密钥越长相对破解难度越大):CULTURE 加密过程:如果第一行为明文字母,第一列为密钥字母,那么明文字母’T’列和密钥字母’C’行的交点就是密文字母’V’,以此类推 密文:VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK

网站

  • Cryptanalysis of the Vigenere Cipher
  • Vigenère cipher
  • Vigenere Solver
  • 维吉尼亚密码

实例

  • 攻防世界 Crypto高手进阶区 3分题 shanghai

12、格罗斯费尔德密码

格罗斯费尔德密码(Gronsfeld cipher)

  • 实际上和维吉尼亚密码相同,除了使用了数字来代替字母以外没有什么区别
  • 数字可以选择一种数列,如斐波那契数列,或者一些其他的伪随机序列
  • 格罗斯费尔德密码密码分析过程和维吉尼亚密码大同小异,不过,自动密钥密码不能使用卡西斯基算法(kasiski)来破译

代码语言:javascript复制
>>>from pycipher import Gronsfeld
>>>Gronsfeld([2,20,11,45,20,43,4]).encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'
>>>Gronsfeld([2,20,11,45,20,43,4]).decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

网站 Gronsfeld Cipher Gronsfeld密码

13、自动密钥密码

自动密钥密码(Autokey Cipher)

  • 是多表替换密码,与维吉尼亚密码密切相关,但使用不同的方法生成密钥,通常来说要比维吉尼亚密码更安全
  • 自动密钥密码主要有两种,关键词自动密钥密码和原文自动密钥密码

下面我们以关键词自动密钥为例: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 关键词:CULTURE 自动生成密钥:CULTURE THE QUICK BROWN FOX JUMPS OVER THE 接下来的加密过程和维吉尼亚密码类似,从密表可得: 密文:VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK

网站 Cryptanalysis of the Autokey Cipher Autokey Cipher 自动密钥密码

14、博福特密码

博福特密码(Beaufort Cipher)

  • 一种类似于维吉尼亚密码的代换密码,由弗朗西斯·蒲福(Francis Beaufort)发明
  • 最知名的应用是Hagelin M-209密码机
  • 属于对等加密,即加密演算法与解密演算法相同

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密钥(循环使用,密钥越长相对破解难度越大):CULTURE 加密过程:如果第一行为明文字母,第一列为密文字母,那么沿明文字母’T’列出现密钥字母’C’的行号就是密文字母’J’,以此类推。 密文:JNH DAJCS TUFYE ZOX CZICM OZHC BKA RUMV RDY

网站 Beaufort Cipher 博福特密码

15、滚动密钥密码

滚动密钥密码(Running Key Cipher)

  • 和维吉尼亚密码有着相同的加密机制,区别是密钥的选取,维吉尼亚使用的密钥简短,而且重复循环使用,与之相反,滚动密钥密码使用很长的密钥,比如引用一本书作为密钥
  • 这样做的目的是不重复循环使用密钥,使密文更难破译,尽管如此,滚动密钥密码还是可以被攻破,因为有关于密钥和明文的统计分析模式可供利用,如果滚动密钥密码使用统计上的随机密钥来源,那么理论上是不可破译的,因为任何可能都可以成为密钥,并且所有的可能性都是相等的。

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密钥:选取C语言编程(1978版)第63页第1行”errors can occur in several places. A label has…”,去掉非字母部分作为密钥(实际选取的密钥很长,长度至少不小于明文长度)。 加密过程:加密过程和维吉尼亚密码加密过程相同 密文:XYV ELAEK OFQYH WWK BYHTJ OGTC TJI DAK YESR

网站 Running Key Cipher 滚动密钥密码

16、夏多密码(曲折加密)

作者麦克斯韦·格兰特在中篇小说《死亡之链》塑造夏多这一英雄人物中所自创的密码

在以上所示的字母表密钥的底部,列有四个附加符号1,2,3,4.他们可以放在密文中的任何地方 每个附加符号指示,如何转动写有密文的纸张,再进行后续的加密或解密操作,直到出现另一个附加符号

例:信文:I AM IN DANGER.SEND HELP(我有危险,速来增援) 可以加密成

17、波利比奥斯方阵密码

波利比奥斯方阵密码(Polybius Square Cipher或称波利比奥斯棋盘)

  • 棋盘密码的一种,是利用波利比奥斯方阵进行加密的密码方式,简单的来说就是把字母排列好,用坐标(行列)的形式表现出来
  • 字母是密文,明文便是字母的坐标 常见的排布方式:

加密实例: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:442315 4145241325 1242345233 213453 2445323543 442315 31115554 143422

18、普莱菲尔密码

普莱菲尔密码(Playfair Cipher)

  • 第一种用于实际的双字替换密码,用双字加密取代了简单代换密码的单字加密,很明显这样使得密文更难破译
  • 又称为单方密码(Single Cipher)之后又出现它的升级版Double Playfair,也就是二方密码(Two-square Cipher),在之后又有四方密码(Four-square Cipher)

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密钥:CULTURE

(1)编制密码表

  • 理密钥字母C U L T U R E,去掉后面重复的字母得到:C U L T R E
  • 用上一步得到的字母自上而下来填补5乘5方表的纵列(也可横排),之后的空白按照相同的顺序用字母表中剩余的字母依次填补完整,得到如下的方格:

这一步需要注意的要点:整理密钥字母时,如果出现”Z”,则需要去除,因为在英文里”Z”的使用频率最低,相应的如果是德文,则需将”I”与”J”当作一个字母来看待,而法语则去掉”W”或”K”。

(2)整理明文

我们要遵循的原则是“两个一组”,得到是若干个两两成对的字母段,用到的是明文THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG与字母”X“:

  • 将明文两两一组按顺序排开,得到:TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO G
  • 对于末尾的单个字母要加上一个”X“使之成对:TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX 这一步需要注意的要点:对于相连字母相同者,每个后面都需要加”X“,例如TOMORROW,需要写成:TO MO RX RX OW。

(3)编写密文

我们要得到的密文,当然,对于每个字母对,要严格遵循如下的原则:

  • 如果两个字母在同一行则要用它右邻的字母替换,如果已在最右边,则用该行最左边的替换,如明文为”CE“,依据上表,应替换为”EG“;
  • 如果两个字母在同一列则要用它下边的字母替换,如果已在最下边,则用该行最上边的替换,如明文为”OQ“,依据上表,应替换为”PS“;
  • 如果两个字母在不同的行或列,则应在密码表中找两个字母使四个字母组成一个矩形,明文占据两个顶点,需用另外两个顶点的字母替换,如明文为”HX“,可以替换为”WI/J“或”I/JW“(下面的例子将按照横向替换原则即同行优先)。

按照上述原则,将明文TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX加以转换得到KU ND LH GT LF WU ES PW LH SI/J NP CG CR AG BU VZ QA I/JV(/表示或者,不过一般用I不用J,所以分析密文时你看25个字母都有而只差一个字母没有用到可以考虑一下这种加密方式)将得到的字母改为大写并五个一组列好

密文KUNDL HGTLF WUESP WLHSI NPCGC RAGBU VZQAI V

网站 Playfair Cipher 普莱菲尔密码

19、ADFGX密码

ADFGX密码(ADFGX Cipher)

  • 结合了改良过的Polybius方格替代密码与单行换位密码的矩阵加密密码
  • 使用了5个合理的密文字母:A,D,F,G,X,这些字母之所以这样选择是因为当转译成摩尔斯电码(ADFGX密码是德国军队在一战发明使用的密码)不易混淆,目的是尽可能减少转译过程的操作错误

加密矩阵示例:

代码语言:javascript复制
   A  D  F  G   X
  ----------------
A | p  h  q  g   m 
D | e  a  y  n   o 
F | f  d  x  k   r
G | c  v  s  z   w 
X | b  u  t  i/j l

明文:THE QUICK BROWN FOX 密文:XF AD DA AF XD XG GA FG XA FX DX GX DG FA DX FF

网站 ADFGX Cipher ADFGX密码

20、ADFGVX密码

ADFGVX密码实际上就是ADFGX密码的扩充升级版 一样具有ADFGX密码相同的特点,加密过程也类似 不同的是密文字母增加了V,使得可以再使用10数字来替换明文

代码语言:javascript复制
    A D F G V X
  -------------
A | p h 0 q g 6
D | 4 m e a 1 y
F | l 2 n o f d
G | x k r 3 c v
V | s 5 z w 7 b
X | j 9 u t i 8

网站 ADFGVX密码

21、双密码

双密码(Bifid Cipher)结合了波利比奥斯方阵换位密码,并采用分级实现扩散,这里的“双”是指用2个密钥进行加密 密阵:

代码语言:javascript复制
  1 2 3 4 5
1| p h q g m
2| e a y l n
3| o f d x k
4| r c v s z
5| w b u t i/j

明文:THE QUICK BROWN FOX 经过密阵转换: 行:512 15543 54352 333 列:421 33525 21115 214 分组:

代码语言:javascript复制
51215 54354 35233 3
42133 52521 11521 4

合并:

代码语言:javascript复制
5121542133 5435452521 3523311521 34

在经过密阵转换后密文:WETED TKZNE KYOME X

网站 Bifid Cipher Cryptanalysis of the Bifid cipher 双密码

22、三分密码

三分密码(Trifid Cipher)结合换位和替换,三分密码与双密码非常相似,差别之处就是用除了3×3×3的密阵代替5×5密阵。

示例密阵:

代码语言:javascript复制
密阵顺序 = EPSDUCVWYM.ZLKXNBTFGORIJHAQ
代码语言:javascript复制
密阵顺序 = EPSDUCVWYM.ZLKXNBTFGORIJHAQ      
 
方阵 1      方阵 2      方阵 3                                     
  1 2 3      1 2 3      1 2 3    
1 E P S    1 M . Z    1 F G O    
2 D U C    2 L K X    2 R I J    
3 V W Y    3 N B T    3 H A Q 

明文:THE QUICK BROWN FOX. 经过密阵转换:

代码语言:javascript复制
T H E Q U I C K B R O W N F O X .
2 3 1 3 1 3 1 2 2 3 3 1 2 3 3 2 2
3 3 1 3 2 2 2 2 3 2 1 3 3 1 1 2 1
3 1 1 3 2 2 3 2 2 1 3 2 1 1 3 3 2
T(233)表示T在第一个方阵第三行第三列的

位置 分组(分组密钥以5为例):

代码语言:javascript复制
THEQU ICKBR OWNFO X.
23131 31223 31233 22
33132 22232 13311 21
31132 23221 32113 32

合并:

代码语言:javascript复制
23131 33132 31132 31223 22232 23221 31233 13311 32113 22 21 32

在经过密阵转换后密文:

代码语言:javascript复制
231313313231132312232223223221312331331132113222132
N  O  O  N  W  G  B  X  X  L  G  H  H  W  S  K  W

23、四方密码

四方密码(Four-Square Cipher)

  • 类似普莱菲尔密码双字母加密密码,这样使加密效果强于其他替换密码,因为频率分析变得更加困难了
  • 使用4个预先设置的5×5字母矩阵,每个矩阵包括25个字母,通常字母’j’被融入到’i’中(维基百科上说’q’被忽略,不过这不重要,因为’q’和’j’都是很少出现的字母),通常左上和右下矩阵式是标准字母排序明文矩阵,右上和左下矩阵是打乱顺序的密钥矩阵。

示例矩阵:

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 整理明文(分组不够时用’X’填充):TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX 加密过程:分别在明文矩阵中找到’TH’,分别找到他们在右上矩阵有左下矩阵的交点字母’ES’就是密文,以此类推。 密文:ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ

网站 Four-Square Cipher Cryptanalysis of the Foursquare Cipher 四方密码

24、棋盘密码

棋盘密码(Checkerboard Cipher)是使用一个波利比奥斯方阵和两个密钥作为密阵的替换密码,通常在波利比奥斯方阵中J字母往往被包含在I字母中。

示例密阵:

代码语言:javascript复制
  Q  U  I  C  K
  --------------
B |K  N I/J G  H
R |P  Q  R  S  T
O |O  Y  Z  U  A
W |M  X  W  V  B
N |L  F  E  D  C

经过密阵替换:

明文:T H E Q U I C K B R O W N F O X 密文:RK BK RU OC OC BI NK BQ WK RI OQ WI BU NU OQ WU

25、跨棋盘密码

跨棋盘密码(Straddle Checkerboard Cipher)是一种替换密码,当这种密码在结合其他加密方式,加密效果会更好。

棋盘示例(选择3和7作为变换):

代码语言:javascript复制
   0 1 2 3 4 5 6 7 8 9
   f k m   c p d   y e
3: h b i g q r o s a z
7: l u t j n w v x

明文: T H E Q U I C K B R O W N F O X 经过加密棋盘替换得到密文:72 30 9 34 71 32 4 1 31 35 36 75 74 0 36 77

当然我们还可以继续用其他的加密方式在对跨棋盘密码加密出的结果再进行加密: 示例变换密钥:83729

代码语言:javascript复制
 8372983729837298372983729837
 7230934713241313536757403677
-----------------------------
 5502817432078501808630122404

在经过棋盘转换后:

代码语言:javascript复制
5502817432078501808630122404
ppfmyk n if  pfkyfyd hkmmcfc

最终得到密文:ppfmyk n in pfkyfyd hkmmcfc

网站 Straddle Checkerboard Cipher

26、云影密码

采用的是0作间隔,其他非0数隔开后组合起来相加表示26个字母

脚本

代码语言:javascript复制

#!/usr/bin/python
# -*- coding=utf8 -*-
"""
# @Author : pig
# @CreatedTime:2019-11-2423:54:02
# @Description : 
"""


def de_code(c):
    dic = [chr(i) for i in range(ord("A"), ord("Z")   1)]
    flag = []
    c2 = [i for i in c.split("0")]
    for i in c2:
        c3 = 0
        for j in i:
            c3  = int(j)
        flag.append(dic[c3 - 1])
    return flag

def encode(plaintext):
    dic = [chr(i) for i in range(ord("A"), ord("Z")   1)]
    m = [i for i in plaintext]
    tmp = [];flag = []
    for i in range(len(m)):
        for j in range(len(dic)):
            if m[i] == dic[j]:
                tmp.append(j   1)
    for i in tmp:
        res = ""
        if i >= 8:
            res  = int(i/8)*"8"
        if i%8 >=4:
            res  = int(i%8/4)*"4"
        if i%4 >=2:
            res  = int(i%4/2)*"2"
        if i%2 >= 1:
            res  = int(i%2/1)*"1"
        flag.append(res   "0")
    print ("".join(flag)[:-1])

c = input("输入要解密的数字串:")
print (de_code(c))
m_code = input("请输入要加密的数字串:")
encode(m_code)

27、Porta密码

Porta密码(Porta Cipher)是一个由意大利那不勒斯的医生Giovanni Battista della Porta发明的多表代换密码 Porta密码具有加密解密过程的是相同的特点

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密钥(循环使用,密钥越长相对破解难度越大):CULTURE 加密过程:明文字母’T’列与密钥字母’C’行交点就是密文字母’F’,以此类推。 密文:FRW HKQRY YMFMF UAA OLWHD ALWI JPT ZXHC NGV

网站 Porta Cipher Porta密码

28、仿射密码

仿射密码(Affine Cipher)

  • 一种单表代换密码,字母表中的每个字母相应的值使用一个简单的数学函数映射到对应的数值,再把对应数值转换成字母
  • 这个公式意味着每个字母加密都会返回一个相同的字母,意义着这种加密方式本质上是一种标准替代密码
  • 因此,它具有所有替代密码的弱点
  • 每一个字母都是通过函数(ax b)mod m加密,其中B是位移量,为了保证仿射密码的可逆性,a和m需要满足gcd(a , m)=1,一般m为设置为26

以E(x) = (5x 8) mod 26函数为例

解密用D(x)=21(x - 8) mod 26

网站 Affine Cipher 仿射密码

29、Bazeries密码

Bazeries密码(Bazeries Cipher)是换位密码和替换密码的组合

  • 使用两个波利比奥斯方阵,一个明文字母方阵
  • 使用一个随机的数字(一般小于1000000)的生成一个密钥矩阵同时作为第一轮明文划分分组,比如2333这个数字翻译为英文便是TWO THOUSAND THREE HUNDRED THIRTY THREE,从第一个字母T开始选取不重复的字母,之后再从字母表中按序选取没有出现的字母组成密钥矩阵。

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 随机数字:2333 明文矩阵:

代码语言:javascript复制
A  F  L  Q  V
B  G  M  R  W
C  H  N  S  X
D I/J O  T  Y
E  K  P  U  Z

示例密钥矩阵:

代码语言:javascript复制
T  W  O  H  U
S  A  N  D  R
E I/J Y  B  C
F  G  K  L  M
P  Q  V  X  Z

明文分组:

代码语言:javascript复制
2      3      3    3        2    3     3       3    2     3    3      3
TH EQU ICK BRO WN FOX JUM PSO VE RTH ELA ZYD OG

代码语言:javascript复制
分组明文反序:
HT UQE KCI ORB WN XOF MUJ OSP EV EHT ALE DYZ GO

使用密钥矩阵替换:

代码语言:javascript复制
IL XHP QEG KDS YR CKW NXG KBV PU ILD TOP FMZ AK
(比如’H’在明文矩阵对应到密钥矩阵的位置就是’I’)

30、当铺密码

当铺密码 就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几

例如:

代码语言:javascript复制
王夫 井工 夫口 由中人 井中 夫夫 由中大
67 84 70 123 82 77 125

四、现代密码

1、RSA

RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。目前普遍认为,模式n至少应该取1024位,最好是2048位。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。

RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

脚本

代码语言:javascript复制
import libnum
from Crypto.Util.number import long_to_bytes

q = int("0xa6055ec186de51800ddd6fcbf0192384ff42d707a55f57af4fcfb0d1dc7bd97055e8275cd4b78ec63c5d592f567c66393a061324aa2e6a8d8fc2a910cbee1ed9",16)
p = int("0xfa0f9463ea0a93b929c099320d31c277e0b0dbc65b189ed76124f5a1218f5d91fd0102a4c8de11f28be5e4d0ae91ab319f4537e97ed74bc663e972a4a9119307",16)

e = int("0x6d1fdab4ce3217b3fc32c9ed480a31d067fd57d93a9ab52b472dc393ab7852fbcb11abbebfd6aaae8032db1316dc22d3f7c3d631e24df13ef23d3b381a1c3e04abcc745d402ee3a031ac2718fae63b240837b4f657f29ca4702da9af22a3a019d68904a969ddb01bcf941df70af042f4fae5cbeb9c2151b324f387e525094c41",16)

c = 0x7fe1a4f743675d1987d25d38111fae0f78bbea6852cba5beda47db76d119a3efe24cb04b9449f53becd43b0b46e269826a983f832abb53b7a7e24a43ad15378344ed5c20f51e268186d24c76050c1e73647523bd5f91d9b6ad3e86bbf9126588b1dee21e6997372e36c3e74284734748891829665086e0dc523ed23c386bb520

n = q*p
 
d = libnum.invmod(e, (p - 1) * (q - 1))
m = pow(c, d, n)   # m 的十进制形式
string = long_to_bytes(m)  # m明文
print(string)

网站 在线RSA公钥加密解密 在线RSA私钥加密解密

2、AES

在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

aes密文包括字母 数字 = /等

网站 AES加密 在线加密解密

3、DES

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法

网站 DES算法原理完整版 在线DES加密解密

4、ECC

ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学) 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性 公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类 有时也把椭圆曲线类归为离散对数类

网站 ECC(椭圆曲线密码编码学)简介

5、RC4

RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一

网站 RC4算法总结 RC4加解密

五、代码混淆加密

1、VBScript.Encode解密

VBScript.Encode解密

2、ppencode

ppencode-Perl把Perl代码转换成只有英文字母的字符串

网站 ppencode - JavaScript demo PPencode

3、rrencode

rrencode可以把ruby代码全部转换成符号

暂时没找到网站 之前有个挂了

4、jjencode

jjencode将JS代码转换成只有符号的字符串 jjencode的解密直接在浏览器的控制台里输入密文即可执行解密

网站 JJencode MALWARE ANALYSIS

5、aaencode/颜文字

aaencode的解密直接在浏览器的控制台里输入密文即可执行解密

网站 aaencode demo aadecode - Decode encoded-as-aaencode JavaScript program. [’_’] AAencode

6、JSfuck

JSFuck 可以让你只用 6 个字符[ ]( ) ! 来编写 JavaScript 程序

网站 JSFuck JSfuck

7、jother

jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式 其中8个少量字符包括:! ( ) [ ] { },只用这些字符就能完成对任意字符串的编码 直接在浏览器(f12)的控制台里输入密文即可执行解密

网站 jother

8、brainfuck

Brainfuck是一种极小化的计算机语言,按照”Turing complete(完整图灵机)”思想设计的语言 它的主要设计思路是:用最小的概念实现一种“简单”的语言 Brainfuck只有八种符号,所有的操作都由这八种符号> < - . , [ ]的组合来完成

网站 Brainfuck/Ook! Obfuscation/Encoding Brainfuck

9、Ook!

Ook! 与Brainfuck类似, 但用单词“Ook!”,“Ook.” 和“Ook?”代替

网站 Brainfuck/Ook! Obfuscation/Encoding

10、Bubble Babble

Bubble Babble

  • 由Antti Huima创建的一种编码方法,可以把二进制信息表示为由交替的元音和辅音组成的伪词(pseudo-words)
  • 主要用于密码指纹,其编码也具有内置的纠错和冗余
  • 编码格式每5个字符中间以-来分隔,作者的原意就是想把难以记得的二进制数据表示为难忘的伪词

网站 bubblepy BubbleBabble

六、其他

1、与佛论禅

与佛论禅

2、文本加密

文本加密

3、核心价值观密码

核心价值观密码

4、恩尼格码密码

恩尼格玛密码机(德语:Enigma,又译哑谜机,或“谜”式密码机)是一种用于加密与解密文件的密码机。确切地说,恩尼格玛是对二战时期纳粹德国使用的一系列相似的转子机械加解密机器的统称,它包括了许多不同的型号,为密码学对称加密算法的流加密

模拟

5、兽音译者

给我笑死 兽音译者

结语

对常见的编码和密码做了个归纳

一些好用的网站和工具

  • https://web2hack.org/xssee/
  • json在线
  • 程默的博客
  • CaptfEncoder
  • python_cryptanalysis
  • Kryptos and Cryptanalysis Information
  • Cipher Tools
  • 在线加密解密

持续更新


红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。

0 人点赞