实例
在本例中,我们将使用 escape() 来编码字符串,然后使用 unescape() 对其解码: <script type="text/javascript"> var test1="Visit W3School!" test1=escape(test1) document.write (test1 + "<br />") test1=unescape(test1) document.write(test1 + "<br />") </script>输出
Visit%20W3School%21 Visit W3School!前言
玩过CTF的小伙伴会经常遇到类似这样的问题:dalao这是啥编码方式啊?怎么解密啊?其实CTF中的脑洞密码题,通常是非现代加密方式,一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但都会留下不少线索,当然也需要参赛者对于各种编码方式有所了解,这样更有利于快速入手解密,结合一定的脑洞,拿到Flag就so easy了.编码方式汇总 常见编码
ASCii编码 Base64/32/16编码 shellcode编码 Quoted-printable编码 XXencode编码 UUencode编码 URL编码 Unicode编码 Escape/Unescape编码 HTML实体编码 Tap Code敲击码 Morse Code摩尔斯电码各种文本加密
换位加密
Rail-fence Cipher栅栏密码 Curve Cipher曲路密码 Columnar Transposition Cipher列位移加密替换加密
Atbash Cipher埃特巴什码 Caesar Cipher凯撒密码 ROT5/13/18/47 Simple Substitution Cipher简单换位密码 Hill Cipher希尔密码 Pigpen Cipher猪圈密码 Polybius Square Cipher波利比奥斯方阵密码 夏多密码(曲折加密) Playfair Cipher普莱费尔密码 Vigenere Cipher维吉尼亚密码 Autokey Cipher自动密钥密码 Beaufort Cipher波弗特密码 Running Key Cipher滚动密钥密码 Porta Cipher Homophonic Substitution Cipher同音替换密码 Affine Cipher仿射密码 Baconian Cipher培根密码 ADFG/VX Cipher ADFG和ADFGVX密码 Bifid Cipher双密码 Trifid Cipher三分密码 Four-Square Cipher四方密码 Checkerboard Cipher棋盘密码============================ Base64
ZXZhbCgkX1BPU1RbcDRuOV96MV96aDNuOV9qMXVfU2gxX0oxM10p NTU2NJC3ODHHYWJIZ3P4ZWY= Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’Base32
Base32和Base64相比只有一个区别就是,用32个字符表示256个ASC字符,也就是说5个ASC字符一组可以生成8个Base字符,反之亦然。编解码
希尔密码 密文: 22,09,00,12,03,01,10,03,04,08,01,17 明文:wjamdbkdeibr 解题思路: 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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 把字母用数字表示,解密时把数字转换成字母 栅栏密码 把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 凯撒密码 通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。 Unicode Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。 一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码 如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。 为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。 形式: 在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。 在Unicode中:汉字“字”对应的数字是23383(十进制),十六进制表示为5B57。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“Unicode Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。 例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是: char data_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8编码 char16_t data_utf16[]={0x6C49,0x5B57}; //UTF-16编码 char32_t data_utf32[]={0x00006C49,0x00005B57};//UTF-32编码 这里用char、char16_t、char32_t分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以char、char16_t、char32_t作为编码单位。 例1:“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。 例2:Unicode编码0x20C30在0x010000-0x10FFFF之间,使用4字节模板:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将0x20C30写成21位二进制数字(不足21位就在前面补0):0 0010 0000 1100 0011 0000,用这个比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。 Brainfuck 类型:++++++++++[>+++++++>++++++++++>+++>+<<<<-] 摩斯密码 密文样例:– — .-. … . jsfuck 密文样例:()[]{}!+ 如果jsfuck定义的是一个函数并且最后以()结尾,则在火狐console中运行时函数也会运行,就会错掉什么提示。这时候需要把最后的()换成.toString() 培根密码 培根所用的密码是一种本质上用二进制数设计的。不过,他没有用通常的0和1来表示,而是采用a和b。对照培根密码表进行解密。 费娜姆密码(异或) 已知将一个flag以一种加密形式并使用密钥进行加密,使用密钥WELCOMETOCFF加密后密文为 000000000000000000000000000000000000000000000000000101110000110001000000101000000001 请分析出flag。 密钥为12位,密文为84位,可能是异或: 解: 7位二进制可能表示字母顺序: W E L C O M E T O C F 密文 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0010111 0000110 0010000 0010100 0000001 密钥 0010111 0000101 0001100 0000011 0001111 0001101 0000101 0010100 0001111 0000011 0000110 0000110 Xor 0010111 0000101 0001100 0000011 0001111 0001101 0000101 0000011 0001001 0010011 0010010 0000111 W E L C O M E C I S R G flag:WELCOMECISRG 猪圈密码,又称共济会密码 CRC32 密文样例:4D1FAE0B CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。 颜文字加密(aaencode) 这个好萌啊>.< 颜文字js加密:明文alert(“flag”); 密文:゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ [‘’]; o=(゚ー゚) ==3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o_o)/ (o_o);(゚Д゚)={゚Θ゚: ‘’ ,゚ω゚ノ : ((゚ω゚ノ==3) +’’) [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ ‘’)[o^^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +’’)[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +’’) [c language=”_o”][/c];(゚Д゚) [‘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 language=”^^o”][/c];(゚Д゚) [゚o゚]='”‘;(゚Д゚) [‘’] ( (゚Д゚) [‘’] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o_o) +(o_o))+ ((o_o) – (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o_o) +(o_o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c_o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o_o) – (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o_o) +(o_o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o_o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o_o) – (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o_o))+ (o_o)+ (゚Д゚)[゚o゚]) (゚Θ゚)) (‘_’); Jjencode 密文:$=~[];$={:++$,$$$$:(![]+””)[$],$:++$,$$:(![]+””)[$],$:++$,$$$:({}+””)[$],$$$:($[$]+””)[$],$$:++$,$$$:(!””+””)[$],$:++$,$$:++$,$$:({}+””)[$],$$:++$,$$$:++$,$:++$,$$:++$};$.$=($.$=$+””)[$.$$]+($.$=$.$[$.$])+($.$$=($.$+””)[$.$])+((!$)+””)[$.$$]+($.=$.$[$.$$])+($.$=(!””+””)[$.$])+($.=(!””+””)[$.$])+$.$[$.$$]+$.+$.$+$.$;$.$$=$.$+(!””+””)[$.$$]+$.+$.+$.$+$.$$;$.$=($.)[$.$][$.$];$.$($.$($.$$+”””+$.$$+(![]+””)[$.$]+$.$$$+”\”+$.$+$.$$+$.$+$.+”(\”\”+$.$+$.$+$.+$.$$$+(![]+””)[$.$]+(![]+””)[$.$]+$.$+”,\”+$.$+$.+”\”+$.$+$.$+$.$+$.$$+”\”+$.$+$.$$+$.$$+$.$$+”\”+$.$+$.$+$.$$+$.$$+”\”+$.$+$.$$+$.$+”\”+$.$+$.$$+$.$+”\”+$.$+$.$$+$.+$.+”\”\”+$.$+$._+”)”+”””)())(); Utf-7编解码 原文:gdfgdfg 密文:+AGcAZABmAGcAZABmAGc- 无论何种,都是+开头-结尾 RC4 RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。 曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。 HEX编码 https://blog.csdn.net/lzwglory/article/details/19971347 仿射密码 https://blog.csdn.net/qq_41725312/article/details/81067248