认识编码基础
通识 | 认识编码
漏斗社区
本文分享自微信公众号 – 漏斗社区(newdooneSec),作者:pensar
认识编码
编码指的是信息从一个形式或格式转换为另一种形式的过程。——维基百科
发展简介
人类可以交流以来,语言变得至关重要,从中国汉字再到拉丁语系,信息的存储与转译的方式越来越多种多样。在计算机以及通信等数字化领域,以01数字为基础同样也演变出了适用计算机不同领域的编码方法,而编码的本质就是在原有字符集的基础上根据规则进行格式的转换。
通信领域的编码
1.摩斯编码
特征特点:用点tik(.)和横tak(-)来编码范围0-9、A-Z的字符,字母不区分大小写,两个字母之间的空格用斜杠(/)或者三个点(.)或者一个划(-)表示,两个单词之间的间隔是七个点(.)。
2.敲击码
特征特点:敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是用K字母被整合到C中,因此密文的特征为1-5的两位一组的数字,编码的范围是A-Z字母字符集,字母不区分大小写。
3.格雷编码
特征特点:由相邻两位数之间只有一个位元改变的二进制数码构成数列集合。传统的二进位系统例如数字3的表示法为011,要切换为邻近的数字4,也就是100时,装置中的三个位元都得要转换,因此于未完全转换的过程时装置会经历短暂的,010,001,101,110,111等其中数种状态,也就是代表着2、1、5、6、7,因此此种数字编码方法于邻近数字转换时有比较大的误差可能范围。格雷码的发明即是用来将误差之可能性缩减至最小。
4.中文电码
特征特点:加密字符串以4位[0-9]为一组的数字表示,如4986 0588两组数字分别表示汉字中文:“网协”。 中文电码,又称中文电报码或中文电报明码,是于电报之中传送中文信息的方法。它是第一个把汉字化作电子讯号的编码表。其中简体中文电码收录了7085个汉字,繁体中文电码收录了9041个汉字。
计算机相关的编码
01
常见的编码
字母表编码
特征特点:用数字1-26或者0-25来编码范围为A-Z/a-z字母字符,字母不区分大小写。
进制编码
特征特点:主要是各进制之间的转换。
二进制数,只有01两个字符 ;八进制数,0开头,用[0-7] 8个字符表示;十六进制数,0x开头,[0-9,a-f ]等十六个个字符表示。
ASCII编码
特征特点:用1个字节的8位数来编码英文字符集,即所有字母数字等英文符号可以用二进制数、十进制、十六进制来表示。比如大写字母A可分别用二进制数(01000001)、十进制(65)、十六进制(0x41)来表示。
GBK/GBK2312编码
特征特点:用2个字节16比特的16进制数表示来编码中文字符集,其中GBK是GBK2312的扩展字符集编码,包含简体、繁体中文、日语、韩语等。比如斗哥斗对应的GBK和GBK2312为B6B7。
Unicode编码(重要)
特征特点:国际标准字符,将全球的各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台文本信息的转换,当编码和解码的字符集出现不一致的时候就会出现乱码。
unicode一般有四种表示形式 :
&#x [Hex]: The
&# [Decimal]: The
\U [Hex]: \U0054\U0068\U0065
\U+ [Hex]: \U+0054\U+0068\U+0065
UTF-8
特征特点:utf-8是一种可变长的字符编码,主要是为了节省存储空间,编码长度根据编码的字符集从1个字节到6个字节不等。
URL编码
特征特点:一个字符ascii码的十六进制,然后在前面加上%
例如:%E4%BD%A0%E5%A5%BD在谷歌内核浏览器中表示”你好“。
base系列编码
\1. base64
特征特点:密文由64个字符(A-Z,a-z,0-9,+,/)组成,末尾可能会出现1或2个’=’ 最多有2个。
加密原理过程如下:
base64索引表如下:
\2. base32
特征特点:密文由32个字符(A-Z,2-7)组成,末尾可能会有‘=’,但最多有6个。
\3. base16
特征特点:密文由16个字符(0-9,A-F)组成。
\4. base36
特征特点:密文由36个字符(0-9,a-z)组成,加密仅支持整数数字,解密仅支持字符串,不支持中文 密文由36个字符(0-9,A-Z)。
\5. base58
特征特点:Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址,Base58不使用数字”0”,字母大写”O”,字母大写”I”,和字母小写”l”,以及”+”和”/”符号。
\6. base62
特征特点:密文由62字符(0-9,a-z,A-Z)组成。
\7. base91
特征特点:密文由91个字符(0-9,a-z,A-Z,!#$%&()*+,./:;<=>?@[]^_`{|}~”)组成。
02
代码混淆加密
UUencode
特征特点:一种二进制到文字的编码,将要编码的文件转化为二进制,重新分组进行编码的过程,与base64编码类似。
XXencode
特征特点:与xxencode类似,区别是打印的字符不同。
quoted-printable
特征特点:在所有邮件处理的各式各样的编码中,很多编码的目的都是通过编码的手段使得七位字符的邮件协议体系可以传送八位的二进制文件、双字节语言等等。Quoted-Printable也是这样一些编码中的一个,它的目的同样是帮助非ASCII编码的信件传输通过SMTP。Quoted-Printable编码是字符对应的编码,每个末编码的二进制字符被编码成三个字符,即一个等号和一个十六进制的数字,如‘=AB’。
jjencode
特征特点:将JS代码转换成只有符号的字符串
aaencode
特征特点:将JS代码转换成常用的网络表情
ppencode
特征特点:把Perl代码转换成只有英文字母的字符串。
rrencode
特征特点:把ruby代码全部转换成符号。
JSfuck
特征特点:用6个字符( ) [ ] !+ 来对JavaScript进行编码。
jother
特征特点:密文为8个字符! + ( ) [ ] { }
brainfuck编程语言
特征特点:密文由+.<>[]’ && ‘!.?或者’+-.<>[]’等组成。
03
古典密码
换位加密
栅栏密码(Rail-fence Cipher)
特征特点:栅栏密码是一种简单的移动字符位置的加密方法,加密前后的字符数不变。
栅栏密码的加密方式:把文本按照一定的字数分成多个组,取每组第一个字连起来得到密文1,再取每组第二个字连起来得到密文2……最后把密文1、密文2……连成整段密文。
曲路密码(Curve Cipher)
特征特点:曲路密码(Curve Cipher)是一种换位密码,需要事先约定填充的行列数(也就是曲路路径)
列移位密码(Columnar Transposition Cipher)
特征特点:列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。
以明文 The quick brown fox jumps over the lazy dog,密钥 how are u为例: 填入5行7列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)
密钥:how are u
按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
替换加密
埃特巴什码(Atbash Cipher)
特征特点:埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为特殊密钥的替换加密
对应关系如下:ABCDEFGHIJKLMNOPQRSTUVWXYZ ZYXWVUTSRQPONMLKJIHGFEDCBA
凯撒密码(Caesar Cipher)
特征特点:明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文
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。
猪圈密码(Pigpen Cipher)
特征特点:
图形:
圣堂武士密码(Templar Cipher)
特征特点:
键盘密码(Keyboard Cipher)
特征特点:利用键盘的特性制作的密码,常见有计算机的键盘和手机的键盘,加密的方式有坐标法和顺序法。
坐标法:Y轴 1 QWE RTY UIOP
2 ASD FGH JKL
3 ZXC VBN M
12345678910 X轴
eq:密文:2251914161 对应明文:story
顺序法:Q W E R T Y U I O P
1 2 3 4 5 6 7 8 9 10
A S D F G H J K L
11 12 13 14 15 16 17 18 19
Z X C V B N M
20 21 22 23 24 25 26
eq:密文:125947 对应明文:story
手机九宫格键盘密码
特征特点:密文用数字0-9表示a-z的字符集,字母不区分大小写。
密文:21222331323341424351525361626371727381828391929394
明:abcdefghijklmnopqrtuvwxyz
维吉尼亚密码(Vigenère Cipher)
特征特点:维吉尼亚密码(Vigenère Cipher)是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计
希尔密码(Hill Cipher)
特征特点:希尔密码(Hill Cipher)是基于线性代数多重代换密码,由Lester S. Hill在1929年发明。每个字母转换成26进制数字:A=0, B=1, C=2…Z=25一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26。
波利比奥斯方阵密码(Polybius Square Cipher)
特征特点:波利比奥斯方阵密码(Polybius Square Cipher或称波利比奥斯棋盘)是棋盘密码的一种,是利用波利比奥斯方阵进行加密的密码方式,简单的来说就是把字母排列好,用坐标(行列)的形式表现出来。字母是密文,明文便是字母的坐标。
夏多密码(曲折加密)
特征特点:夏多密码是作者麦克斯韦·格兰特在中篇小说《死亡之链》塑造夏多这一英雄人物中所自创的密码 。
培根密码(Baconian Cipher)
特征特点:培根密码(Baconian Cipher)是一种替换密码,每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由’A’和’B’组成序列替换明文(所以你当然也可以用别的字母),比如字母’D’替换成”aaabb”,以下是全部的对应关系(另一种对于关系是每个字母都有唯一对应序列,I和J与U/V各自都有不同对应序列):
ADFGX和ADFGVX密码(ADFG/VX Cipher)
特征特点:ADFGX密码(ADFGX Cipher)是结合了改良过的Polybius方格替代密码与单行换位密码的矩阵加密密码,使用了5个合理的密文字母:A,D,F,G,X,这些字母之所以这样选择是因为当转译成摩尔斯电码(ADFGX密码是德国军队在一战发明使用的密码)不易混淆,目的是尽可能减少转译过程的操作错误。
双密码(Bifid Cipher)
特征特点:双密码(Bifid Cipher)结合了波利比奥斯方阵换位密码,并采用分级实现扩散,这里的“双”是指用2个密钥进行加密。双密码是由法国Felix Delastelle发明,除此之外Felix Delastelle还发明了三分密码(Trifid Cipher),四方密码(Four-Square Cipher)。还有一个两方密码(Two-Square)与四方密码类似,共轭矩阵双密码(Conjugated Matrix Bifid Cipher)也是双密码的变种。
现实世界中常用的编码
01
条形码
特征特点:宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。
02
二维码
特征特点:用某种特定几何图形按一定规律在平面分步的黑白相间的图形记录数据符号信息。
堆叠式 / 行排式二维码:Code 16 k、Code 49、PDF417
矩阵式二维码:QR CODE
03
当铺密码
特征特点:密文由[0-9]数字组成(以当前汉字有多少笔画出头,就是转化成对应的数字)。
密文:0123456789
原文:口由中人工大王夫井羊
04
核心价值观编码
特征特点:密文特征为社会主义核心价值观的关键字。
05
与佛论禅
特征特点:密文以”佛曰:如是我闻:”开头,密文一般是与关佛经的汉字。
`