ctf 密码基础

古典密码

单表代换加密

明密文一一对应,

当密钥空间足够大,而密文长度足够短的情况下,破解较为困难。

凯撒密码

基本破解:1)遍历26个偏移量2)利用词频分析(不一定得到正确的明文)

工具:1)JPK,可解带密钥与不带密钥2)Online calculator: Caesar cipher 3)ROT5、ROT13、ROT18、ROT47位移编码

移位密码

和凯撒密码的区别是在其不仅会处理字母,还会处理数字和特殊字符,常见的ascII码表进行移位

基本破解:遍历所有可能性进破解

Atbash Cipher

它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母

工具:Practical Cryptography

简单替换密码

将每个明文字母替换为与之唯一对应且不同的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的,解密时,我们一般是知道了每一个字母的对应规则,才可以正常解密。一般采用词频分析。

工具:quipqiup - cryptoquip and cryptogram solver

仿射密码

加密函数是 E(x)=(ax+b)(mod m)

解密函数是 D(x)=a^(-1)(x−b)(mod m)

1)x 表示明文按照某种编码得到的数字2)a和 m互质3)m 是编码系统中字母的数目。

当a=1 时,仿射加密是凯撒加密

多表代换加密

playfair

基本算法,选取一串英文字母,除去重复出现的字母,将剩下的字母逐个逐个加入 5 × 5 的矩阵内,剩下的空间由未加入的英文字母依 a-z 的顺序加入。注意,将 q 去除,或将 i 和 j 视作同一字。将要加密的明文分成两个一组。若组内的字母相同,将 X(或 Q)加到该组的第一个字母后,重新分组。若剩下一个字,也加入 X 。在每组中,找出两个字母在矩阵中的地方,1)若两个字母不同行也不同列,在矩阵中找出另外两个字母(第一个字母对应行优先),使这四个字母成为一个长方形的四个角。2)若两个字母同行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。3)若两个字母同列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。

工具;CAP4

polubius

棋盘密码,一般是将给定的明文加密为两两组合的数字,常用密码表5×5,26个字母依次填入,i/j代表同一个,行和列的序号都是1~5。明文加密之后一个字母被加密成他的行列号。还有一种打乱的密码表

工具:CrypTool

维吉尼亚

使用一系列凯撒密码组成密码字母表的加密算法,26×26,第一行偏移量为0,从A开始,第二行偏移为1,从B开始,偏移量依次加一,最后从Z开始。加密方式是先将密钥填充和明文一个长度,然后明文(行)和对应的密钥字母(列)在密码表中相交叉的位置的字母

已知密钥

1)Python 的 pycipher 库2)在线解密 Vigenère cipher3)CAP4

未知密钥1)Vigenère Cipher Codebreaker2)Vigenere Solver

nihilist

关键词密码,利用密钥(关键词)构造棋盘矩阵5×5,将关键词不重复的依次填入矩阵,剩下字母按照字母顺序填入 ij等价。明文字母所在的行列号就是加密后的结果

hill

希尔密码,使用每个字母在字母表中的顺序作为其对应的数字,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘,再将得出的结果模 26。注意用作加密的矩阵(即密匙)在 Zn26 必须是可逆的,否则就不可能解码。只有矩阵的行列式和 26 互质,才是可逆的。

工具 1)Practical Cryptography 2) CAP4 3) Cryptool

autokeyipher

自动密钥密码也是多表替换密码,与维吉尼亚密码密码类似,但是是用不同方式产生密钥。分为关键词自动密钥密码和原文自动密钥密码。加密方式和维吉尼亚加密方式一样

工具

已知关键词:Python 的 pycipher 库

未知关键词:Practical Cryptography

其他类型加密

培根密码:http://rumkin.com/tools/cipher/baconian.php

栅栏密码:栅栏密码在线加密解密 - 千千秀字

曲路密码:

列移位相加:Practical Cryptography

01248密码:云影密码(只有 0,1,2,4,8)

JSfuck:JSFuck 在线加密网站

BrainFuck:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]

猪圈密码:The Black Chamber - Pigpen Cipher

舞动的小人密码:

键盘密码

流密码

流密码的密钥长度会与明文的长度相同,流密码的密钥派生自一个较短的密钥,派生算法通常为一个伪随机数生成算法。目前来说流加密都是对称加密。关键在于设计好的伪随机数生成器,流密码加解密非常简单,在已知明文的情况下,可以非常容易地获取密钥流。

伪随机数生成器(PRNG)

是用来生成接近于绝对随机数序列的数序列的算法。PRNG会依赖一个初始值(种子),来生成伪随机数序列(种子确定,所生成的随机数序列就是确定的)

密码安全伪随机数生成器(CSPRNG),特殊的伪随机数生成器,生成的伪随机数应该满足更高的要求,比如当生成器的部分初始状态或者运行时的状态被攻击者获知时,攻击者仍然不能够获取泄漏状态之前的生成的随机数。

线性同余生成器(LCG)

n级反馈移位寄存器,首先会有n个初态元素(a0,a1,,,,,an-1),F是反馈函数和反馈逻辑,根据函数类型,可以分为线性反馈移位寄存器(LFSR)和非线性。

所以ai+n=F(ai,ai+1,,,,,,ai+n-1)

反馈移位寄存器都会定义在某个有限域上,可以将其视为同一个空间中的变换,对于一个序列来说,我们一般定义其生成函数为其序列对应的幂级数的和。

反馈移位寄存器

特殊流密码

RC4

块加密

非对称加密

非对称加密中加密者和解密者所使用的密钥不一样,典型的密码有RSA,背包加密,椭圆曲线加密

RSA

基本原理

  1. 随机选择两个不同大质数 p 和 q,计算 N=p×q

  2. 根据欧拉函数,求得 φ(N)=φ(p)φ(q)=(p−1)(q−1)

  3. 选择一个小于 φ(N)的整数 e,使 e 和 φ(N)互质。并求得 e关于 φ(N) 的模反元素,命名为 d,有 ed≡1(modφ(N))≡1(mod(N))

  4. 将 p 和 q 的记录销毁

此时,(N,e)是公钥,(N,d)是私钥。

工具

RSAtool

安装
git clone https://github.com/ius/rsatool.git
cd rsatool
python rsatool.py -h
生成私钥
python rsatool.py -f PEM -o private.pem -p 1234567 -q 7654321

RSA Converter

根据给定密钥对,生成pem文件。根据n,e,d得出p,q

openssl

查看公钥文件
openssl rsa -pubin -in pubkey.pem -text -modulus
解密
rsautl -decrypt -inkey private.pem -in flag.enc -out flag

http://factordb.com

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值