总是习惯性将所有事情拖到ddl前一天晚上......(这是病,得治!!!!)
实在是困得不行了&_&,好多内容还没写,回头再补充。
密码学
密码学(Cryptography)一般可分为古典密码学和现代密码学。
对密码系统的攻击:
一、古典密码
在CTF中,我们经常能看到一些简单的古典密码。在古典密码学中,我们主要介绍单表替代密码,多表替代密码,以及一些其它比较有意思的密码。
1、单表代换密码:代换是对每个字母逐个进行。
在单表代换中,明密文一一对应。所以说,一般有两种方式来进行破解:密钥空间小时可采用暴力破解;密文长度足够长时,使用词频分析(字母:E>T>A>O>I,词组:the>ing>and>her>e,在线分析:http://quipqiup.com/ )
(1)凯撒密码:凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
特定的凯撒密码:
1)偏移量为 13时 ROT13
2)一种基于密钥的凯撒密码 Keyed Caesar:利用一个密钥,将密钥的每一位转换为数字(一般转化为字母表对应顺序的数字),分别以这一数字为密钥加密明文的每一位字母。
破解:遍历26个偏移量,词频分析(密文多时适用)
在线加解密:http://planetcalc.com/1434/
(2)移位密码:与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理数字和特殊字符,常用 ASCII 码表进行移位。
破解:遍历所有的可能性
在线加解密:http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/
(3)简单替换密码:简单替换密码(Simple Substitution Cipher)加密时,将每个明文字母替换为与之唯一对应且不同的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的。
破解:由于这种加密方式导致其所有的秘钥个数是26!,所以几乎上不可能使用暴力的解决方式。所以我们 一般采用词频分析。
(4)仿射密码:
(原理看书👀)
破解:可用词频分析,也可根据具体情况进行密码攻击。
2、多表代换密码:代换对多个字母同时进行。对于多表替换加密来说,加密后的字母几乎不再保持原来的频率,所以我们一般只能通过寻找算法实现对应的弱点进行破解。
(1)Playfair
(2)Polybius
(3)Vigenere
(4)Nihilist
(5)Hill
(6)AutokeyCipher
3、其他古典密码
(1)培根密码:培根密码使用两种不同的字体,代表 A 和 B,结合加密表进行加解密。
特点:只有两种字符、每一段的长度为 5、加密内容会有特殊的字体之分,亦或者大小写之分。
在线加解密:http://rumkin.com/tools/cipher/baconian.php
通常查表直接解:
http://blog.csdn.net/qq_39455664/article/details/78344952
(2)栅栏密码:栅栏密码把要加密的明文分成 N 个一组,然后把每组的第 1 个字连起来,形成一段无规律的话。
(3)列移位加密:列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。
在线加解密:http://www.practicalcryptography.com/ciphers/classical-era/columnar-transposition/
(4)01248 密码:该密码又称为云影密码,使用 01248 四个数字,其中 0 用来表示间隔,其他数字以加法可以表示出 如:28=10,124=7,18=9,再用 1->26 表示 A->Z。
特点:只有 01248
(5)摩斯密码:摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。
特点:只有.(点)和-(划)
在线加解密:https://www.bejson.com/enc/morse/
(6)JSFuck:JSFuck 可以只用 6 个字符 !+ 来编写 JavaScript 程序。
在线加解密:http://www.jsfuck.com/
(7)BrainFuck:
(8)猪圈密码:猪圈密码是一种以格子为基础的简单替代式密码。
在线加解密:http://www.simonsingh.net/The_Black_Chamber/pigpen.html
二、现代密码
现代密码学又可以简单的分为以下几个方面:
对称密码,以 DES,AES,RC4 为代表
非对称密码,以 RSA,椭圆曲线加密为代表
HASH,以 MD5,SHA1,SHA512 等为代表
数字签名,以 RSA 签名,ElGamal 签名,DSA 签名为代表
其加密方式主要有两种方式:块加密、流加密
一般来说,密码设计者的基本想法是确保密码框架的保密性、完整性、可用性、不可否认性,其中,前三者又称为 CIA 三元组。
而对于密码破解者来说,一般都是要想办法识别密码算法,然后利用暴力破解方法或者密码框架的漏洞进行破解。当然,也有可能是处于希望构造虚假的哈希值或者签名来绕过相应的检测。
1、对称密码:加密、解密密钥相同或者很容易从其中一个推出另一个。
(1)DES
(2)AES
(3)RC4
(4)A5
2、非对称密码
(1)RSA算法
(2)RSA衍生算法
编码
1、ASCII编码
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符);
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字;
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
在线转换:http://tool.oschina.net/encode?type=3
工具:win下小葵转换器
2、Base64/32/16编码
1)Base64:所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。
2)Base32:Base32编码将二进制文件转换成由32个ASCII字符(大写字母A-Z、数字2-7)组成的文本。
3)Base16:Base16编码则将二进制文件转换成由16个字符(大写字母A-F、数字0-9)组成的文本。
3、URL编码:url编码又叫百分号编码,是统一资源定位(URL)编码方式。
编码方法很简单,在该字节ascii码的的16进制字符前面加%。
4、Unicode编码
Unicode编码有以下四种编码方式:
源文本: The
&#x [Hex]: The
&# [Decimal]: The
\U [Hex]: \U0054\U0068\U0065
\U+ [Hex]: \U+0054\U+0068\U+0065