CTF 密码学基础

一、编码基础

1、ASCII码


2、unicode 使用16位的编码空间,每个字符占用2个字节


3、utf-8 是针对unicode的可变长度字符编码,使用1至6个字节为每个字符编码


4、base64 是一种基于64个可打印字符来表示二进制数据的表示方法;A-Z、a-z、+、/共64个字符,最后用=填充

base64组成:A-Z、a-z、+、/

base32组成:大写字母(A-Z)和数字234567

base16组成:0-9、ABCDEF

———————————————————————————————————————————————————————

二、古典加密

1、凯撒密码


2、playfair(一种替换密码)

1、编制密码表
编一个5*5的密码表,共有5行5列字母。第一列(或第一行)是密钥,其余按照字母顺序,如果密钥过长可占用第二列或行。密钥是一个单词或词组,若有重复字母,将后面重复的字母去掉。当然也要把使用频率最少的字母去掉。
例:密钥是Live and learn,去掉后则为liveandr

密钥:shiyanb 可编成

 s    h     i     y     a
 n    b     c     d     e
 f    g     j     k     l
 m    o     p     q     r  
 t    u     v     w     x

2、整理明文/密文,将明文/密文每两个字母组成一对。如果成对后有两个相同字母紧挨或最后一个字母是单个的,就插入一个字母X(或者Q)。

密文: KQSAMFPAOPMFPA=====>KQ SA MF PA OP MF PA

3、解密规则
(1) 若c1 c2在同一行,对应明文p1 p2分别是紧靠c1 c2 左端的字母。其中最后一列被看做是第一列的左方。
(2) 若c1 c2在同一列,对应明文p1 p2分别是紧靠c1 c2 上方的字母。其中最后一行被看做是第一行的上方。
(3)若c1 c2不在同一行,不在同一列,则p1 p2是由c1 c2确定的矩形的其他两角的字母。

密文:KQ SA MF PA OP MF PA
明文:dk ay fn ir mo fn ir

4、加密规则

(1)若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。如,按照前表,fg对应gj,mr对应om
(2) 若p1 p2在同一列,对应密文c1 c2分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。
(3)若p1 p2不在同一行,不在同一列,则c1 c2是由p1 p2确定的矩形的其他两角的字母(至于横向替换还是纵向替换要事先约好,或自行尝试)。如,按照前表,ir对应pa或ap。
转载链接https://www.cnblogs.com/xdjun/p/7469841.html


3、polybius
用一套错综复杂的字母表填满波利比奥斯方阵图
在这里插入图片描述
选择ADFGX?作为行列标原因
|: 他们译成摩斯码时不容易混淆,可以降低传输错的几率
||:使用这个方格,找出明文字母在这个方格的位置,再以那个字母所在的栏名称和列名称代替这个字母

加密时可以在表格中找到明文,然后使用明文所在的行字符和列字符代替,比如明文为g,则密文为GA,明文为a,则密文为 AF。解密时只需在密码表里边找到 行列所对应的字符就可以解密,比如密文为AFAD,则明文为AT,比如密文为XF,则明文为e。
转载链接https://blog.csdn.net/suwu150/article/details/51360186


4、vigenere

———————————————————————————————————————————————————————

三、对称加密
根据加密对象分为流加密和块加密

1、RC4(流加密)


2、DES(块加密)


3、AES(块加密)

———————————————————————————————————————————————————————

四、非对称加密

RSA算法
选取两个素数p和q,因为p和q都是素数,所以p和q互质
取n=p * q
由欧拉定理,k = φ(n) = (p-1) * (q-1)
任取一个与k互质且小于k的整数e, 有gcd(e, k)=1
求e关于模k的乘法逆元d, 即e * d =1(mod k)
则(e, n)为公钥, (d,n)为私钥

以客户端向服务端发送数据过程为例, 进行加密和解密
加密:假定明文为x,则密文为y=x ^ e(mod n)
解密:假定密文为y,则明文为x=y ^ d(mod n)

示例
取p=3, q=11
n = p * q = 33
φ(n)= 20
取e = 3, gcd(3, 20)=1
3 * d = 1 (mod 20) ==>d=7
公钥(3, 33)、私钥(7, 33)
加密11:y = 11 ^ 3 mod 33 = 11
解密11:x = 11 ^ 7 mod 33 = 11
加密25:y = 25 ^ 3 mod 33 = 16
解密16:x = 16 ^ 7 mod 33 = 25

证明
在网上没找到,自己瞎证的,不知道对不对
在这里插入图片描述

———————————————————————————————————————————————————————
DH算法–密钥交换
可以使两个用户能够安全地交换密钥, 得到一个共享的会话密钥。
p是一个大素数,g是p的本原根(生成元),a、b是小于p的一个随机整数。
在这里插入图片描述
根据上述流程,客户端于服务端之间明文传输的是g、p、A、B,然后双方就可以得到一个同样的共享密钥K,并以K对后续要传输的数据进行对称加密解密即可。
由于计算K需要一方的私钥和另一方的公钥,所以理论上只要双方的私钥a、b不被第三方知道就可以。

———————————————————————————————————————————————————————

x.509证书

X.509是密码学里公钥证书的格式标准,已经应用在包括TLS/SSL在内的众多Internet协议里
X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息。

———————————————————————————————————————————————————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

H4ppyD0g

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

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

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

打赏作者

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

抵扣说明:

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

余额充值