初入密码学之置换加密与暴力破解

摘要:此为学习现代密码学的一次作业,能进行不是较大文本量的txt文本周期性置换加密,并进行密文的暴力破解。

文件解释

1.将文件放在同一个python文件夹下使用

2.encryption.py为加密程序,decrypt为暴力破解程序

3.plain.txt为初始待加密文本,cipher.txt为加密后生成的文本,DecryptWoed.txt为暴力破解后生成的文本。

4.若要运行可删除 (3)中的三个文本重新运行。

加密程序运行解释

1.首先输入置换加密密钥的位数。

2.输入置换加密的密钥。若加密密钥为(1 5 6 2 3 )则将其代换后输入 531462

3.将待加密文本重命名为plain.txt

4.等待加密后生成cipher.txt

解密程序运行解释

1.输入密钥长度即可进行暴力破解

2.采用的是深度搜索来遍历密钥的所有可能。

3.等待解密后生成DecryptWoed.txt。

4.其中所以可能会在DecryptWoed.txt以回车进行分隔。

加密程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import re

def translate():
#将txt文本存入word1
file = open('plain.txt','r',encoding='utf-8')
word1 = file.read()
file.close
#将txt文本转换只剩下英文单词
word=''
word2 = re.findall('[a-zA-Z]+', word1)
for i in word2:
word = word + i
return word

def encryption(wordlist,deltalist):
#进行置换加密
NewWordlist = []
for i in wordlist:
con = ''
str = i
for j in deltalist:
con = con + str[ j -1 ]
NewWordlist.append(con)
return NewWordlist



def save(word):
file2 = open('cipher.txt','a',encoding='utf-8')
for i in word:
file2.write(i)

file2.close()

def main():
deltasize = int(input("请输入您的密钥位数:"))
delta = input("请输入您的密钥:")
deltalist=[]
for j in delta:
deltalist.append(int(j))

#将word存入wordlist列表中
word = translate()
wordlist = []
j = 0
str = ''
for i in word :
if(j < deltasize):
str = str +i
j=j+1
if(j == deltasize ):
wordlist.append(str)
j = 0
str = ''

for i in wordlist:
str = i
print(str)
NewWordlist = []
NewWordlist = encryption(wordlist,deltalist)
#用save函数存入cipher.txt中
save(NewWordlist)


main()

暴力破解代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def save(word):
#存储
file2 = open('DecryptWoed.txt','a',encoding='utf-8')
for i in word:
file2.write(i)
file2.write(("\n"))
file2.close()

def decrypt(wordlist,deltalist):
#进行置换解密
NewWordlist = []
for i in wordlist:
con = ''
str = i
for j in deltalist:
con = con + str[ j -1 ]
NewWordlist.append(con)
return NewWordlist

def DFS(p,delta,token,newdelta,wordlist):
#深度搜索密钥的所以可能性
if p == len(delta):
print(newdelta)
save(decrypt(wordlist,newdelta))
return


for index in range(len(delta)):
if token[index] == True:
newdelta[p] = delta[index]
token[index] = False
DFS(p+1,delta,token,newdelta,wordlist)
token[index] = True


def main():
deltasize = int(input("输入密钥位数:"))
delta =[]
for i in range(1, deltasize + 1):
delta.append(i)
token = [True for i in range(len(delta))] #用来深度搜索判断
newdelta = ['' for i in range(0, len(delta))] #引用来存储一次深度优先后的结果
file = open('cipher.txt','r',encoding='utf-8')
word = file.read()
#将word存入wordlist列表中
wordlist = []
j = 0
str = ''
for i in word :
if(j < deltasize):
str = str +i
j=j+1
if(j == deltasize ):
wordlist.append(str)
j = 0
str = ''

DFS(0,delta,token,newdelta,wordlist)


main()
------- 本文结束  感谢您的阅读 -------