编码解码
编码解码——(浅学)
前言

在CTF密码学中,编码解码是很重要的部分。编码是将信息从一种形式转换为另一种特定形式,而解码则是编码的逆过程。
密码学的发展是从古典密码到现代密码,以下是我的了解:
- 古典密码学——密码体系的安全性取决于算法和密钥的保密;
- 现代密码学——密码体系的安全性取决于密钥的保密;
- 非对称密码算法(公钥密码算法)——加密和解密的密钥不同
- 对称密码算法——加密和解密的密钥相同
以下开启我在drops培训里所学到的编码与解码
古典密码
凯撒密码
它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成
密文。
例如,当偏移量为左移3时
明文:ABCDE
密文:DEFGH
此时密钥为3
培根密码
培根密码的本质是将字母用一串二进制数替换,但是表示的过程中,没有采取0和1的形式,而使用a和b来代替
加密的过程首先将要加密的内容根据加密表里的内容进行替换, 如a用AAAAA替换,b用AAAAB替换。 替换完之
后,我们可以把A和B当作两个不同的特征(如大写/小写,正体/斜体)带入到一个无关的句子中, 这就得到了我
们加密后的结果。
例如 任选一句话,将a当作小写,b当作大写
明文:Happy Birthday
密钥:aaabb ababb abbaa
密文:hapPY bIrTHdAY
维吉尼亚密码
是由一些偏移量不同的恺撒密码组成。

加密原理
它使用一个密钥词,根据这个密钥词来循环决定每个明文字母应该按照哪种凯撒密码(单表替换密码)进行替换。例如,有一个密钥词是“KEY”,明文是“HELLO”。首先,密钥词“KEY”会重复,使其长度与明文长度相同,对于“HELLO”就变成“KEYKE”。
字母H按照以K为偏移量的凯撒密码进行加密(在英文字母表中,A是0,B是1,以此类推,K对应的数字是10,所以H加密后对应的字母是R,因为H往后数10个字母是R),E按照以E为偏移量的凯撒密码加密,第二个L按照以Y为偏移量的凯撒密码加密,以此类推。
解密过程
解密时,需要知道密钥词。计算出每个密文字母相对于对应密钥字母的偏移量,然后还原出明文。例如,如果密文是“RDLUL”,密钥是“KEY”,对于字母R,因为K对应的偏移量是10,所以往前推10个字母就可以得到H,从而解出。
栅栏密码
栅栏密码把要加密的明文分成N个一组,然后把每组的第一个字连起来,形成一段无规律的话,
例如:
- THERE IS A CIPHER
- 均分成两组,每组两个
- TH ER EI SA CI PH ER
- 先取出第一个字母,再取出第二个
- TEESCPEHRIAIHR
base家族
base16
1.使用16个ASCII可打印字符(数字0-9和字母A-F),对任意字节数据进行编码。
2.先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来,再按照4比特一组进行切
分,将每组二进制数分别转换成十进制。
流程:给定的字符串根据Ascll标转化成二进制–>重新划分–>再转化为16进制
注:可以看到8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号“=”。 换句话说:
Base16使用两个ASCII字符去编码原数据中的一个字节数据。
base32
1.Base32编码是使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码。
2.Base32主要用于编码二进制数据,但是Base32也能够编码诸如ASCII之类的二进制文本。
3.Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5
比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。
由于数据的二进制传输是按照8比特一组进行(即一个字节),因此Base32按5比特切分的二进制数据必须是40比
特的倍数(5和8的最小公倍数)。
流程:给定的字符串根据Ascll标转化成二进制–>重新划分–>再根据码表转换
重新划分:划分时最后不够5的后面先补0,总体不够40比特的倍数的补等号(一个等号就是5bit)
base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于,所以每6个比特为一个单元,对应某个可
打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。
由于数据的二进制传输是按照8比特一组进行(即一个字节),因此Base64按6比特切分的二进制数据必须是24比
特的倍数(8和6的最小公倍数)。
流程:给定的字符串根据Ascll标转化成二进制–>重新划分–>再根据码表转换
重新划分:划分时最后不够6的后面先补0,总体不够24比特的倍数的补等号(一个等号就是6bit)
辨析
是否有=,有为base32和base64,是否有1,有为base64,无为base32
都无=,不一定就是base16,base16只有字母A~F(特点)也可以有0



