密码学简介
这是我以前所不知道的。
密码学的基本目的是使两个在不安全信道中通信的人,通常称为Alice和Bob,以一种使他们的敌手Oscar不能明白和理解通信内容的方式进行通信。
定义:一个密码体系是满足一下条件的五元组(P,C,K,E,D)
- P代表所有可能的明文组成的有限集
- C代表所有可能的密文组成的有限集
- K代表密钥空间,由所有可能的密钥组成的有限集
- 对于每一个k∈K,都存在一个加密规则ek ∈E和相应的解密规则dk∈D。并且对每对ek :P→C,dk:C→P,满足条件:对每一个明文x∈P,均有dk(ek(x))=x
移位密码
其基础是数论中的模运算
假设a和b均为整数,m为一正整数,若m整除b-a,则可将其表达成a≡b(mod m)。式a≡b(mod m)读作“a与b模m同余”,正整数m称为模数。
定义
令P=C=K=Z26,对0<=K<=25,任意的x,y∈Zm,定义
ek(x)=(x+K)mod 26
和
dk=(y-K)mod 26
凯撒密码
当K=3时,此密码叫做凯撒密码,因为他首先被儒乐 凯撒(就是那个凯撒大帝)所使用的。
他将26个字母与数字一一对应,通过移位与mod26,来进行转换。
下面我用python实现加密解密
#加密
def CaserEncode(m,k):
c=''
for i in m:
c+=chr(ord(i)+k)
return c
# 解密
def CaserDecode(c,k):
m=''
for i in c:
m+=chr(ord(i)-k)
return m
栅栏密码
另一种移位密码,栅栏密码通过将明文进行分栏后重新组合进行加密。
例如 The quick brown fox jumps over the lazy dog,先把空格去掉,Thequickbrownfoxjumpsoverthelazydog
再按进行分栏(6个字母为一栏)
Thequi
ckbrow
nfoxju
mpsove
rthela
zydog
再从上到下每一列读出来,Tcnmrzhkfptyeboshdqrxoeouojvlgiwuea
python实现
# 加密
def FenceEncode(m,k):
j=0
L=[]
n=''
for i in m:
#print(i,end='')
n+=i
j+=1
if j==k:
L.append(n)
j=0
n=''
w=0
c=''
for w in range(len(L[0])):
for i in L:
try:
c+=i[w]
except:
pass
return c
#解密
def FenceDecode(c,k):
l=len(c)/k
if l-int(l)>0:
l=int(l)+1
else:
l=int(l)
p=0
n=''
L=[]
for i in c:
#print(i,end='')
n+=i
p+=1
if p==l:
L.append(n)
p=0
n=''
m=''
for w in range(len(L[0])):
for i in L:
try:
m+=i[w]
except:
pass
return m
其他移位密码
曲路密码,云影密码
参考:大佬博客