目录
②Polybuis加密解密的实现(Nihilist原理相同)
一、移位密码
1.简单移位密码
(1)介绍
移位密码是密码学中最基础、最简单的一种密码形式,可以理解为明文根据密钥进行了位置的变换的得到的密文。
(2)例子
m = flag{easy_easy_crypto}
k='3124'
当明文为m,密钥为k时,移位密码首先以k的长度切分m,具体如下:
flag {eas y_ea sy_c rypt o}
可以看到总共分成了6部分,按照密钥规则3124的顺序对每一部分进行密钥变化,所以密文为:
lafgea{s_eyay_scyprt}o
(3)加密解密的实现
#利用Python实现
#加密
def shift_encrypt(m,k):
l = len(k)
c = ""
for i in range(0,len(m),1):
tmp_c = [""] * 1
if i + 1 > len(m):
tmp_n = m[i:]
else:
tmp_m = m[i:i+1]
for kindex in range(len(tmp_m)):
tmp_c [int(k[kindex]) - 1] = tmp_m[kindex]
c += "".join(tmp_c)
return c
m = "flag{easy_easy_crypto}"
k = '3124'
print shift_encrypt(m,k)
#解密
def shift_encrypt(m,k):
l = len(k)
m = ""
for i in range(0,len(c),1):
tmp_m = [""] * 1
if i + 1 > len(c):
tmp_c = c[i:]
use = []
for kindex in range(len(tmp_c)):
use,append(int(k[kindex]) - 1)
use,sort()
for kindex in range(len(tmp_c)):
tmp_m[kindex] = tmp_c [use,index(int(k[kindex]) -1 )]
else:
tmp_c = c[i:i+1]
for kindex in range(len(tmp_c)):
tmp_m [kindex] = tmp_c[int(k[kindex]) - 1]
m += "".join(tmp_m)
return m
m = "flag{easy_easy_crypto}"
k = '3124'
print shift_encrypt(c,k)
2.曲路密码
曲路密码也是移位密码的一种,加密原理如下:

图中的密文就是从g到T,反过来就是解密
3.云影密码
云影密码又称01248密码,仅仅包含01248几个数字,其中0用于分割,其与数字用于加和操作之后转换为明文,解密方式如下:
def c01248_decode(c):
l = c.split("0")
origin = "abcdefghijklmnopqrstuvwxyz"
r = ""
for i in 1:
tmp = 0
for num in i:
tmp += int(num)
r += origin [tmp-1]
return r
print c01248_decode("884210122048022440414224202480122")
4.栅栏密码
栅栏密码是一种比较特殊的移位密码,密钥只有一个数字k,表示栅栏的长度,所谓的栅栏密码,就是将加密的明文分成k个组,然后取每组的第一个字符依次连接,拼接而成的字符串就是密文
(1)加密解密的实现
#加密
def zhalan_encrypt(m,k):
chip = []
for i in range(0,len(m),k):
if i + k >= len(m):
tmp_m = m[i]
else:
tmp_m = m[i:i+k]
chip.append(tmp_m)
c = ""
for i in range(k):
for tmp_m in chip:
if i < len(tmp_m):
c += tmp_m [i]
return c
m = "flag{zhalan_mima_hahaha}"
k =4
print zhalan_encrypt(m,k)
#解密
def zhanlan_decrypt(c,k):
l = len(c)
partnum = 1 / k
if 1 % k != 0:
partnum += 1
m = [""] * 1
for i in range(0,1,partnum):
if i + partnum >= len(c):
tmp_c = c[i:]
else:
tmp_c = c[i:i + partnum]
for j in range(len(tmp_c)):
m[j * k + i / partnum] = tmp_c[j]
return "".join(m)
c = "f{lm_alzaihhahnmaaga_ah}"
k = 4
print zhanlan_decrypt(c,k)
<
本文详细介绍了古典密码学中移位密码和代替密码的各种类型,包括简单移位密码、曲路密码、云影密码、栅栏密码、凯撒密码、ROT13、埃特巴什码、经典单表代替密码、培根密码、仿射密码以及棋盘类密码。通过实例和加密解密的实现,阐述了这些密码的工作原理和攻击方法,对于理解和应用密码学基础知识有极大帮助。

最低0.47元/天 解锁文章

1513

被折叠的 条评论
为什么被折叠?



