请注意,本文编写于 579 天前,最后编辑于 140 天前,内容可能已经不具有时效性,请谨慎参考。
摘要:此为学习现代密码学的一次作业,能进行不是较大文本量的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以回车进行分隔。
加密程序
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()
暴力破解代码
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()
Comments | 0 条评论