在开始之前先澄清一下:我知道有类似的话题,但没有什么能真正提供任何直接帮助。另外:这是一个类项目;所以我不想找任何人为我编写项目代码。提示和建议是我要找的。(我会找我的教授做这种事,但他却懒得去查看他的电子邮件。)
此程序的目的是获取用户提供的种子,根据整数生成密钥,然后生成一个95 x 95矩阵,其中所有可打印的ascii字符都可用于加密/解密。(Key为alpha,大写)
关键:所有的细胞都必须随机。见下图: Randomized Vigenere Matrix
我将在下面发布我的代码(Python当然不是我的强项,尽管我肯定会接受建设性的批评):
import random
class Vigenere(object):
def __init__(self, seed):
random.seed(seed)
#string containing all valid characters
self.symbols= """!"#$%&'()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^_`abcdefghijklmnopqrstuvwxyz{|}~"""
self.eTable = [[0 for i in range(len(self.symbols))] for i in range(len(self.symbols))]
self.dTable = [[0 for i in range(len(self.symbols))] for i in range(len(self.symbols))]
self.keyWord = ""
self.message = ""
self.ciphertext = ""
self.keywordFromSeed(seed)
def setMessage(self,message):
self.message = message
#Generate psuedorandom keyword from seed
def keywordFromSeed(self,seed):
Letters = []
while seed > 0:
Letters.insert(0,chr((seed % 100) % 26 + 65))
seed = seed // 100
self.keyWord = "".join(Letters)
self.buildVigenere()
#Contructs a 95 x 95 matrix filled randomly
def buildVigenere(self):
n = len(self.symbols)
#Build the vigenere matrix
for i in range(n):
temp = self.symbols
for j in range(n):
r = random.randrange(len(temp))
self.eTable[i][j] = temp[r]
#This line below does not fill entire matrix. Why?
self.dTable[j][(ord(temp[r])-32)] = chr(i+32)
temp = temp.replace(temp[r],'')
def encrypt(self):
for i in range(len(self.message)):
mi = i
ki = i % len(self.keyWord)
self.ciphertext = self.ciphertext + self.eRetrieve(ki,mi)
def decrypt(self):
for i in range(len(self.message)):
emi = i
ki = i % len(self.keyWord)
char = self.dRetrieve(ki,emi)
self.ciphertext = self.ciphertext + char
print(self.ciphertext)
def eRetrieve(self,ki,mi):
row = ord(self.message[mi]) - 32
col = ord(self.keyWord[ki]) - 32
print(row, col)
return self.eTable[row][col]
def dRetrieve(self,ki,emi):
n = len(self.symbols)
whichRow = ord(self.keyWord[ki]) - 32
whichCol = ord(self.message[emi]) - 32
return(self.dTable[whichRow][whichCol])
为了以防万一,这是我的主.py公司名称:
^{pr2}$我刚刚使用了默认种子:7487383487438734
我的明文:ABCdefXYZ
我要回答这个问题:
我想这是你目前的问题。如果我没搞错,这应该是你问题的第一行,而不是简单的功能评论:
^{pr2}$我做的第一件事就是建立一个独立的小例子:
如果你想在这里找到答案,你真的应该学会这样做,更一般来说,你应该成为一个成功的程序员。找到问题所在并能够在一个简单的案例中重现问题往往是关键。在
这里我得到一个错误:
我添加了一些print语句(见上文),发现错误源于
symbols
字符串中缺少< > =
。在为什么不使用
chr
来构建字符串symbols
?在对于
buildVigenere
,可以使用random.shuffle(x)
我能让它工作。我将在下面发布我的实现:
在主.py在
随机化_维格纳.py在
(请确保将“<;”、“=”和“>;”添加到符号列表中。由于某些原因,他们一直被从这篇文章中删除。)
^{pr2}$感谢@Eric Levieil的帮助
相关问题 更多 >
编程相关推荐