我正在python 2.7中创建加密/解密设备。最终目标是允许使用此加密在2个节点之间进行加密通信。我真的只是想知道它是否会被轻易解密。我正在使用system.random这个,所以生成的数字的随机性应该非常好。但实际的算法不是太简单吗?
它生成大量0到255之间的随机整数,这是密钥流。然后将每个字符表示为0到255之间的整数。消息中的第一个字符被添加到第一个整数,第二个字符被添加到第二个等等。这应该使加密消息随着密钥流整数呈现为随机。我只是想我会解释它是如何工作的,而不仅仅是发布脚本。
def createkey():
file = raw_input('file name to save key under:')
maxcount = input("digits? Default is 2500.")
if maxcount == '':
maxcount = 2500
digit = 0
while digit < maxcount:
rng=random.SystemRandom()
key=rng.randint(100,356)
print key
with open(file, "a+") as myfile:
myfile.write(str(key))
digit = digit + 1
myfile.close()
def encrypt():
file_to_encrypt = raw_input('file name or path to encrypt:')
destruct = raw_input('self destruct?')
with open(file_to_encrypt, 'a+') as file:
if destruct == 'y':
file.write('\nThis message will self destruct.')
with open(file_to_encrypt) as file:
length = file.read()
length = len(length)
print length
file_to_write = raw_input('Desired filename for encrypted info:')
keyfile=raw_input('Key file:')
num_chars = len(keyfile)
count = 1
paswd = raw_input('Enter password with which to encrypt file.')
passum = 0
charcount = 0
counter = 0
for letter in paswd:
paschar = ord(letter)
passum = passum + paschar
charcount = charcount + 1
if passum != 0:
passum = int(math.sqrt((2 * passum) / charcount))
else:
pass
with open(file_to_encrypt, 'r') as file:
with open(keyfile) as key:
while counter != length:
txt = file.read(1)
charnum = ord(txt)
lines = key.read(3)
x = lines
x = int(x)
x = x - 100
keynum = (x)
keynum = keynum + passum
enmes = int(charnum) + (keynum)
if enmes >= 256:
enmes = enmes - 256
enmes = chr(enmes)
print enmes
enfile = open(file_to_write, 'a+')
enfile.write(enmes)
count = count + 1
if count == num_chars:
count = 1
counter = counter + 1
答案 0 :(得分:0)
您设计了一个Stream Cipher。已有经过测试且安全的Stream Cyphers,有关示例,请参阅eSTREAM。
Stream Cipher的安全性取决于密钥流生成的安全性。除非你是加密专家,否则你的密钥流生成器几乎肯定是不安全的。您似乎正在使用标准系统RNG。这样的RNG 不安全。至少使用您的系统提供的安全RNG。
你可能想看一下现在已经过时的RC4,但这是一个简单的Stream Cipher示例。除非他为国家安全局工作,否则它会阻止你的小弟弟读你的文件。