引言:
欢迎回到我们的CTF密码学入门系列。在密码学的神秘世界里,每一次的编码和解码都是一场智力的较量。随着技术的发展,加密技术已成为保护信息安全的重要手段,同时也是CTF夺旗赛中不可或缺的一环。今天,我们将深入探讨编码和加密的多种技巧,为那些渴望在CTF赛场上一展身手的新手们提供一份全面的指南。让我们开始这段知识的探险之旅吧!
CTF密码学解码:揭秘夺旗赛中的加密艺术
现在,让我们正式开启密码学之旅的下半部分——深入探讨编码方式和加密技术。
常见的几种编码方式
- 字符编码:
• ASCII编码
• base64编码
• Unicode编码
• URL编码 - javascript编码:
• js混淆
• JSfuck
• jother
• aaencode
一、ASCII编码(这玩意应该用不着我多说啥了吧学过编程的应该都懂)
Ø ASCII 码使用8位二进制数组合来表示256 种
可能的字符。
Ø ASCII编码前128个称为标准ASCII 码,标准ASCII码使用后7位二进制数,即首位二进制数固定为0(0xxxxxxx),以此来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
举例:
“A”字符=01000001=65
“A”字符:字符表示形式,日常使用
01000001:ASCII二进制表示形式,计算机运算
65:ASII十进制表示形式,CTF常用表示形式。
后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8位用于确定附加的128个特殊符号字符、外来语字母和图形符号。
二、Base64编码
Ø Base64:使用64个可显示字符表示所有的ASC字符。
Ø Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面
补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用
“=”,Base64编码特点:编码后输出的文本末尾可能会出现1或2个’=’
示例1:
- 第一步:“M”、“a”、"n"对应的ASCII码值分别为77,97,110,对应的二进制值是01001101、
01100001、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。 - 第二步:如图红色框,将24位每6位二进制位一组分成四组。
- 第三步:在上面每一组前面补两个0,扩展成32个二进制位,此时变为四个字节:00010011、
00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。 • 第四步:用上面的值在Base64编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu
示例2: - 一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;
- 两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”。
三、Unicode编码
Ø 定义:Unicode码扩展自ASCII字元集。在严格的ASCII中,每个字符用8个二进制数(8bit=1byte)
表示;而Unicode是由16个二进制数(2byte)组成的编码字符集。这使得Unicode能够表示世界上所
有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。
Ø 特点:密文中有多个 \uxxx
四、URL编码
Ø url编码,是URL(统一资源定位符)编码方式,因为服务器只能解析URL中常用的数字,字母和部
分特殊字符(/😡?等),其它的字符必须通过URL编码进行编码才能被服务器正常解析。
Ø url编码方式就是在某个字符ascii码的十六进制前面加上“%”。 Ø url编码特点:密文中有多个%号符
举例:空格字符:ASCII码十进制表示形式为32,对应16进制的数值为20,URL编码为%20
以及像中文字符作为参数传输时也需要进行URL编码才能被服务器解析。
五、JS混淆
Ø 开发者为了保护javascript版权,使用eval函数进行其进行混淆处理,该函数可以计算字符串,并执行其中的JS代码从而起到混淆js代码的作用。
Ø 例如:对进行16
进制转换,然后使用eval函数进行读取
Ø 特点:通常在JS脚本里使用eval与function函数进行混淆。
六、JSFuck
Ø JSFuck:用6 个字符 !+ 来编写 JavaScript程序。
Ø 举例:
JavaScript代码:alert(1);使用了!+进行编写。
解密方式1:点击run this 可进行解密,
解密方式2:将加密密文放在浏览器的console控制台上进行解密
七、Jother
Ø Jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编
码方式。其中8个少量字符包括: ! + ( ) [ ] { } 。 Ø 解密方式:jother解码工具/利用浏览器开发者工具进行解密Jother
Ø Jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编
码方式。其中8个少量字符包括: ! + ( ) [ ] { } 。 Ø 解密方式:jother解码工具/利用浏览器开发者工具进行解密
八、aaencode
Ø aaencode:使用常见的网络表情符号对js代码进编码。
Ø 解密:可以直接在控制台进行解码,或者在以下的链接网站进行解码
加解密地址:http://utf-8.jp/public/aaencode.html
常见的几种加密
- 换位加密:
• 栅栏密码
• 曲路密码
• 列位移密码 - 替换加密:
• 凯撒密码
• 摩斯密码
• ROT5/13/18/47
•维吉尼亚密码
• 培根密码
• 键盘密码
换位密码——栅栏密码
Ø 栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合…每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文
曲路密码(Curve Cipher)
是一种换位密码,需要事先双方约定密钥(也就是曲路路径)
列移位密码(Columnar Transposition Cipher)
是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文
凯撒密码(Caesar Cipher或称恺撒加密、恺撒变换、变换加密、位移加密)
是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推
摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯(这个应该小学生都知道吧)
在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代
码,摩尔斯电码主要由以下5种它的代码组成:
- 点(.)
- 划(-)
- 每个字符间短的停顿(通常用空格表示停顿)
- 每个词之间中等的停顿(通常用 / 划分)
- 以及句子之间长的停顿
替换加密——ROT5/13/18/47
Ø ROT5:只对数字进行编码,用当前数字往后数的第5个数字替换当前数字,例如当前为0,编码
后变成5,当前为1,编码后变成6,以此类推顺序循环。
Ø ROT13:只对字母进行编码,用当前字母往后数的第13个字母替换当前字母,例如当前为A,编
码后变成N,当前为B,编码后变成O,以此类推顺序循环。
Ø ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。所以ROT18 就是按照ROT5和ROT13的规则对数字和字母都进行编码。
Ø ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符
ASCII值往后数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,
当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码。
图为ROT13加密前后
维吉尼亚密码(Vigenère Cipher)
是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计。
培根密码(Baconian Cipher)
是一种替换密码,每个明文字母被一个由5字符组成的序列替换,最初
的加密方式就是由‘A’和‘B’组成序列替换明文(所以你当然也可以用别的字母),比如字母‘D’
替换成“aaabb”,以下是全部的对应关系(另一种对于关系是每个字母都有唯一对应序列,I和J 与U/V各自都有不同对应序列)
替换加密——键盘密码
-
QWE加密法:QWE=ABC按照键盘上的字母顺序对应ABC,只对字母加密
-
电脑键盘棋盘加密
-
电脑键盘坐标加密
-
手机键盘密码
摘要算法
MD5(哈希算法)
- MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
- MD5值分为16位和32位,同常MD5的值中最大是F,如,603F52D844017E83CA267751FEE5B61BMD5在线加解密地址:http://www.cmd5.com/http://www.somd5.com/http://www.pmd5.com/
SHA(安全哈希算法)
- SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。SAH的值通常是40位,最大值是F。
- 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是
2^128
数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
当然可以,以下是为您的博客文章撰写的前言和结语:
结语
通过本文的探索,我们不仅揭开了CTF中密码学的神秘面纱,还学习了如何在实际比赛中应用这些技巧。编码和加密技术是信息安全领域的基石,它们保护着我们的数字世界不受侵害。随着技术的不断进步,新的加密方法和挑战也在不断涌现。希望本文能为您在CTF夺旗赛中的旅程提供坚实的基础,并激发您进一步探索密码学的热情。记住,在这个充满未知的领域里,唯有不断学习和实践,才能成为真正的大师。期待在下一篇文章中与您再次相遇,继续我们的密码学之旅。
关于
剑芸信息安全团队
剑芸信息安全团队成立于2022年9月,我们是一个专注于互联网攻防技术研究的团队。我们的研究领域涵盖网络攻防、Web安全、移动终端安全、安全开发以及IoT/物联网/工控安全等。
想了解更多关于我们,请继续关注。