密码学寒假第一周
1.签到
16进制转换为字符串
base16
调用base64库解码
import base64
str = '424a447b57653163306d655f74345f424a444354467d'
print(base64.b16decode(str.upper()))
2.这是base?
题目给出密文和不同于常规的码表,需要替换码表
题目的基本原理是不变的
利用两个循环结构替换码表
import base64
dict='JKLMNOxyUVzABCDEFGH789PQIabcdefghijklmWXYZ0123456RSTnopqrstuvw+/='
normaldict= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
chipertext='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'
l=[]
for i in range(len(chipertext)):
l.append(dict.index(chipertext[i]))
Decreptchipertext=''
for m in l:
Decreptchipertext+=normaldict[m]
flag=base64.b64decode(Decreptchipertext)
print(flag)
3.萌新赛签到
base58
4.crypto2
丢控制台直接得到了明文,可以理解为一种浏览器的编程语言
5.crypto5
题目已知p,q,e,c
普通的rsa解密,之前使用过的脚本如下:
c =
p =
q =
e =
n = p*q
phi_n=(p-1)*(q-1)
d=gmpy2.invert(e,phi_n)
m=pow(c,d,n)
print(m)
print(libnum.n2s(int(m)))
关于base系列密码密文特点的小总结
base16就是用16(2^4)个字符,对二进制数据进行编码的方式
用于编码的字符只有:1-9,A-F
base32就是用32(2^5)个字符,对二进制数据进行编码的方式
A-Z,2-7
base64编码是用64(2^6)个字符,对二进制数据进行编码的方式
在base32的基础上,增加了"a-z,0,1,8,9,+,/“,以及特殊填充字符”="
base36 密文由36个字符组成,加密仅支持整数数字,解密仅支持字符串,不支持中文
A-Z,0-9
base58
不使用数字”0”,字母大写”O”,字母大写”I”,和字母小写”l”,以及”+”和”/”符号
base62 密文由62个字符组成
A-Z,a-z,0-9
base91密文由91个字符组成
0-9,a-z,A-Z, !#$%&()*+,./:;<=>?@[]^_`{|}~”
base100 密文由Emoji表情组成
图解密码技术
在看书时,简单整理的前两章内容大纲。
第一章 或许是密码学的大体介绍
工具箱:
1.对称密码
2.公钥密码(非对称密码)
1和2混合:混合密码系统
3.单向散列函数:对比散列值,(完整性)
4.消息认证码:(完整性,认证通信对象)
5.数字签名:(伪装,篡改,否认)
6.伪随机数生成器
隐写术和密码的区别:密码隐藏内容,隐写术隐藏消息本身,可以混合运用。
第二章 古典密码
三种古典密码
凯撒密码:平移
简单替换密码:替换
Enigma:一种机器,构造好复杂,只进行了简单了解。两重加密,通信密码加密消息,每日密码加密通信密码。通信密码要输入两遍。
两种破译方法
暴力攻击:从密钥空间中穷举搜索找到正确密钥
频率分析:对比明文和密文中字母出现的频率