这是大师傅的wiki
里面涉及了各种密码学的知识和点,很实用,因为大师傅的wiki都在了我也就不多说细说,注意一个坑点,在我们使用解密网站时,比如是栅栏密码或者是base64等,不同的网站得到的结果是不同的,甚至有的网站无法得到结果。原因据师傅们考证来说是因为国内外什么的思想不一样。。。导致的结果不一样。
base64我看使用notepad++就很不错
http://tool.bugku.com/ 这个网站还行吧 支持的挺多
还有一个软件
另外这个是 隐写检查 提取数据的
流量分析的那就是
做这类的题目其实需要很多工具 古典密码和隐写类的多做做题看看别人用的啥,自己下载一份用用就好
凯撒密码
凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3)
对于不带密钥的凯撒密码来说,其基本的破解方法有两种方式
- 遍历 26 个偏移量,适用于普遍情况
- 利用词频分析,适用于密文较长的情况。
其中,第一种方式肯定可以得到明文,而第二种方式则不一定可以得到正确的明文。
而对于基于密钥的凯撒密码来说,一般来说必须知道对应的密钥。
简单替换密码
简单替换密码(Simple Substitution Cipher)加密时,将每个明文字母替换为与之唯一对应且不同的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的,这也使得其破解难度要高于凯撒密码。
一般做法是根据已知的信息推算已知的,一步一步替换。而解密时,我们一般是知道了每一个字母的对应规则,才可以正常解密。
破解
由于这种加密方式导致其所有的密钥个数是26!26! ,所以几乎上不可能使用暴力的解决方式。所以我们 一般采用词频分析。
仿射密码
仿射密码的加密函数是 E(x)=(ax+b)(mod m),其中
- x表示明文按照某种编码得到的数字
- a 和 m 互质
- m是编码系统中字母的数目。
根据加密原理可知,不同字符加密数也不一样。
互质的数,mod的数为字符数,不同的字符对应不同的加密,
求逆元的 gmpy2 里面的invert(a,b)就是a关于b的逆元(安装库的要求比较多,用linux按吧)
栅栏密码
将信息分组,然后每组从第一个链接到一起,毫无规律
特点:
可以分的组数固定,比如10只能分为2组或5组。
遍历,然后输出结果即可。
01248 使用五个数字加密
将信息的1-26使用二进制的01248表示
原理很简单,有了1,2,4,8这四个简单的数字,你可以以加法表示出0-9任何一个数字,例如0=28,7=124,9=18。
这样,再用1-26来表示A-Z,就可以用作密码了。
为了不至于混乱,我个人引入了第五个数字0,来用作间隔,以避免翻译错误,所以还可以称“01248密码”。
题目:12401011801180212011401804
第一步,分割,即124 1 118 118 212 114 18 4
第二步,基本翻译,例如124可以表示7,也可以表示16(加法可以分割1+2+4,12+4),所以可以放在一边,翻译其他没有异议的,可得:124 a s s w o 18 d
键盘密码
对应字母区域的行和列
例子 2373111
我们可以知道2列3行为x 73为m 111位扩展的{ 根据flag格式推测出来的,存在三位一起的。
流密码
流密码一般逐字节或者逐比特处理信息。一般来说
流密码的密钥长度会与明文的长度相同。
流密码的密钥派生自一个较短的密钥,派生算法通常为一个伪随机数生成算法。
需要注意的是,流加密目前来说都是对称加密。
伪随机数生成算法生成的序列的随机性越强,明文中的统计特征被覆盖的更好。
流密码加解密非常简单,在已知明文的情况下,可以非常容易地获取密钥流。
流密码的关键在于设计好的伪随机数生成器。一般来说,伪随机数生成器的基本构造模块为反馈移位寄存器。当然,也有一些特殊设计的流密码,比如 RC4。
伪随机码
伪随机数生成器(pseudorandom number generator,PRNG),又称为确定性随机位生成器(deterministic random bit generator,DRBG),是用来生成接近于绝对随机数序列的数字序列的算法。一般来说,PRNG 会依赖于一个初始值,也称为种子,来生成对应的伪随机数序列。只要种子确定了,PRNG 所生成的随机数就是完全确定的,因此其生成的随机数序列并不是真正随机的。
就目前而言,PRNG 在众多应用都发挥着重要的作用,比如模拟(蒙特卡洛方法),电子竞技,密码应用。
lsfr移位寄存器
几乎都是爆破,依靠流的猜解
RC4
循环是0-255,交换非常频繁
块密码
块加密,英文Block Cyper,又称分组加密,是一种常见的对称加密,具有代表性的块加密有DES,AES,3DES等。块加密的工作模式允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。
使用轮加密函数,使用不同的参数等。
ECB模式
又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。
CBC模式
密码分组链接(CBC,Cipher-block chaining)模式,由IBM于1976年发明,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量IV。
RSA
RSARSA属于非对称加密算法,因为RSARSA使用了两个不同的密钥分别用于加密和解密,这两个密钥称之为公私钥对,其中公钥用于加密,且公钥是公开的,而私钥用于解密,私钥是私有的。
在公开密钥密码体制中,加密密钥(即公开密钥)PKPK是公开信息,而解密密钥(即秘密密钥)SKSK是需要保密的。加密算法EE和解密算法DD也都是公开的。虽然解密密钥SKSK是由公开密钥PKPK决定的,但却不能根据PKPK计算出SKSK(对于简答的加密的处理的话还是可以破解的)。
根据一定的数学原理,采用一点规则生成的成对的公钥秘钥可以实现对信息加密解密,但是想要推导出秘钥很难,这就是基本的依据
RSARSA加密过程
-
找到两个大素数pp和qq,计算出n=p×q
-
得到φ=(p−1)×(q−1),然后选择一个e(1<e<φ),且gcd(φ,e)=1,ggcd为最大公约数,即e和φ互质(互为质数)
-
计算出d,计算方法:(e×d)%φ=1
-
得到了公私钥对,其中{e,n}为公钥,{d,n}为私钥。
-
针对明文M,进行加密:C=M^e%n,得到的C即为密文
-
针对密文C,进行解密,M=C^d%n,得到的M即为明文
通过上面的加密方式和解密方式可以知道,明文是以数字的方式进行加密和解密,一般都是针对单个字符的ASCII码进行加密,也可能两个…,这里的操作对象为位数小于n的位数的数据,比如说一串数据变为二进制为111011101101111011101101,而nn的位数为55那么你要处理的数据可能是1位二进制,2位二进制,3位二进制和44位二进制
图如下:
注意:
当e=1时,C=M%n,相当于没加密, M = C + n*k (k=0,1,2,3...),尝试不同的就可以。