一、密码学的基础知识
1、古典密码和现代密码
古典密码: (1)单表替换加密 (2)多表密码学加密 (3)奇怪的加密方式
现代密码学:(1)对称加密:DES,AES,RC4【加密体制:分组密码(块密码);序列加密(流密码)】
(2)非对称加密:RSA,EIGamal,椭圆曲线加密
(3)哈希函数:MD5,SHA-1,SHA-512
(4)数字签名:RSA签名,DES签名,EIGamal签名
2、密码的目的
保证信息和信息系统的:机密性,完整性,可用性(CIA三性),认证性,不可否认性
3、攻击类型分类
唯密文攻击,已知明文攻击,选择明文攻击(拥有加密权限,能够对明文加密后获得相应密文),选择密文攻击(拥有解密权限,能够对密文解密后获得相应明文)
古典密码学
主要思想:替换或置换或二者结合
一、单表替换加密
通用特点:明密文一一对应
破解方式:暴力破解;词频分析
1、凯撒密码
密钥(偏移量),密文 移位后 明文
import random
print('请选择:1.加密 2.解密')
n=int(input())
if n==1:
print('请输入明文')
a=input()
m=''
num = random.randint(-9,9)
for i in a:
if i>='A' and i<='Z':
m+=chr(((ord(i)-ord('A') + num) % 26) + ord('A'))
elif i>='a' and i<='z':
m += chr(((ord(i) - ord('a') + num) % 26) + ord('a'))
else:
m+=i
print('密文为'+m)
print('密钥为{0}'.format(num))
elif n==2:
print('请输入密钥')
key=int(input())
print('请输入密文')
a=input()
x=''
for i in a:
if i >= 'A' and i <= 'Z':
x += chr(((ord(i) - ord('A') - key) % 26) + ord('A'))
elif i >= 'a' and i <= 'z':
x += chr(((ord(i) - ord('a') - key) % 26) + ord('a'))
else:
x+=i
print('密文为'+x)
移位密码与凯撒密码相似,对数字和特殊字符也根据ASCII码做处理
Atbash Cipher是用字母表第一个字母代表最后一个字母,以此类推
2.简单替换密码
每隔密文字母替换并不是唯一对应,而是混乱的,只有知道每一个字母对应规则才能解密,密钥个数为26!,所以暴力破解几乎不可能,一般采用词频分析。
3.仿射密码
加密函数:E(x)=(ax+b) (mod m)
解密函数:D(x)=a^-1(x-b) (mod m)
解释
x为明文中某编码方式得到的数字
a与m互质
m为编码系统中所有字母个数
破解
1.特别的,a=1时为凯撒密码
一般来讲,采用编码方式一般为26位字母表,所以与26互素且不大于26的个数共
算上偏移b,密钥空间大概为12*26个,若已知一个参数则可枚举另一个参数得到答案。
2.假设采用字母集为26字母表,x1和x2加密后分别为y1和y2
可知,y1=(ax1+b) (mod 26)
y2=(ax2+b) (mod 26)
相减得y1-y2=a(x1-x2) (mod 26),即可得到a,进而得到b