CTF.cryptopals加密集合1

目录

1.base64,base32 ,base16编码

​编辑

1.1.base64编码

 1.2 base32:

1.3 base16:

​编辑

小结:

1.4、补充常见的密码

1.4.1古典密码学


1.base64,base32 ,base16编码

1.1.base64编码

base64索引表

Base64是用于传输8Bit字节码的编码方式之一,每6个比特 作为一个单元,对应某个可打印字符,包括字母A-Z、a-z、数字0 - 9,这样共有62个字符,剩余二个在不同系统上而不同。每三个字节有24个比特,对应4个base64单元,即3个字节表示4个可打印字符。

例如:编码'Man'

 如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个“=”号,代表补足的字节数。也就是说,当最后剩余一个八位字节(一个byte)时,最后6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号

例如

 1.2 base32:

base32索引表

1.3 base16:

base16索引表

练习题一:

https://cryptopals.com/sets/1/challenges/1

import base64
s='49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d'
flag = base64.b16decode(s)
print(flag)

小结:

1、base16编码其实就把字符转成ascii码的16进制。
2、b64encode和b16encode只能对bytes类型的数据进行编码,但解码时可以对bytes类型和string类型的数据都可以解码。

1.4、补充常见的密码

1.4.1古典密码学

古典密码的加密是将明文的每一个字母代换为字母表中的另一个字母。

1.4.1.1凯撒密码

凯撒密码加密时将明文中的每个字母按字母表顺序向前或向后移动固定数目作为密文

题目

加密一次,再来一次,然后回到起点。1Ebbg8Vf7Abg3Nyybjrg

思路:2次,为Rot13

1.4.1.2 移位密码

移位密码可以任意移动,后期不仅处理26个字母,还会处理数字和特殊字符。参照ASCII表进行位移。

1.4.1.3 仿射密码

原理
仿射密码的加密函数是E(x)=(ax+b)(mod m),其中

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

解密函数是D(x)=a-1(x-b)(modm),其中a-1是a在Zm群的乘法逆元。
乘法逆元:
a* a -1(mod m)=1 

例如:

加密

 解密

 

具体python代码可参考:

仿射密码的加密与解密_带问号的小朋友的博客-CSDN博客_仿射密码加密

题目

使用仿射函数y=3x+9加密得到的密文为JYYHWVPIDCOZ,请尝试对其解密。flag为flag{大写明文}。

思路:

y=3x+9——>3x + 9 = y(mod 26)——>x = 3^-1(y-9)mod 26(3的乘法逆元是9)->x=9(y-9)mod 26

注意是三等号

1.4.1.4多表代换密码

  • 该算法基于5*5的字母矩阵,该矩阵使用一个关键词构造(即密钥)
  • 从左到右、从上到下顺序,填入关键词的字母(去除重复字母)后,将字母表其作余字母填入。(I=J)
  • 将明文两个分为一组,若出现相同字母,则用X替代最后字母。在每组中,查找矩阵替换:
  1. 若两个字母同行,则用右方字母替换
  2. 若两个字母同列,则用下方字母替换
  3. 若即不同行也不同列,则用矩阵对角字母替换

1.4.1.5 棋盘密码

 

1.4.1.6 Vigenere维吉尼亚密码

使用26个字母购成字母阵横行为明文列,纵向为密钥列

 加密: C = P + K(mod26)

 解密: P = (C-K)%26

题目:

今天来和Caesar学习一-点新知识吧: Google下?听说与FLAG这个字符串有关: kwam{atgksprklzojozb}
思路:当时走了弯路,后来尝试了Vigenere

1.4.1.7 培根密码(bacon)

本质上是二进制,没有用01,而是AB

题目 

先按照五个一组重新排序

bAcon iSaME aTpro dUcTp rePar edfrO mapig andUs uALLy cUReD

在对照表可以得到flag

ilikebacon

1.4.1.8 栅栏密码(Railfence)

2栏栅栏密码:
比如明文:THEREISACIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:THEREISACIPHER
先取出每行第一个字母:TEESCPE
再取出每行第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
而解密的时候,先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THEREIS A CIPHER
主要像是矩阵,以列为顺序依次取数。

多栏栅栏密码:
明文:THEREISACIPHER
七个一组:THEREISACIPHER

抽取字母:TAHCEIRP EHIE SR

组合得到密码:TAHCEIRPEHIESR
可以通过分析密码的字母数来解出密码
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏
尝试2栏--》失败
尝试7栏--》成功

当字母数m为偶数时,分栏数可能是其因子
当字母数m为奇数时,可能是前m-1个均分,最后一个独自成行,当然也可能m+1均分,任意分都有可能

题目
Caesar 被困住了2333333,13 根栅栏,怎么办?h{igr},aarclietflhf-_peecirroc,eo_fhlels caifnge

1.4.1.9 摩斯密码(Morse)

用.和_表示,以前用于发电报

 可以在网上在线工具直接计算

http://www.zhongguosou.com/zonghe/moErSiCodeCon verter.aspx
或者:
http://rumkin.com/tools/cipher/morse.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Camelus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值