Python 2.7 这听起来像加密吗?
我正在用python 2.7制作一个加密/解密设备。最终目标是允许使用此加密在2个节点之间进行加密通信。我真的只是想知道它看起来是否不容易被解密。我用system.random来做这个,所以生成的数字的随机性应该很好。但实际的算法不是太简单吗 它会生成许多介于0和255之间的随机整数,这就是密钥流。然后将每个字符表示为0到255之间的整数。消息中的第一个字符添加到第一个整数,第二个字符添加到第二个整数,以此类推。这将使加密消息与密钥流整数一样随机。我只是想解释一下它是如何工作的,而不是仅仅发布脚本Python 2.7 这听起来像加密吗?,python-2.7,cryptography,Python 2.7,Cryptography,我正在用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
你设计了一个流密码。已经有经过测试的安全流密码可用,有关一些示例,请参阅 流密码的安全性取决于密钥流生成的安全性。除非您是加密专家,否则您的密钥流生成器几乎肯定是不安全的。您似乎正在使用标准系统RNG。此类RNG不安全。至少使用系统提供的安全RNG
您可能想看看RC4,它现在已经过时了,但它是流密码的一个很好的简单示例。它会阻止你的小弟弟阅读你的文件,除非他为国家安全局工作。一般来说,如果你不得不问自己编的加密算法是否容易被破解,那么答案是:是的,几乎可以肯定是。查一下施奈尔定律。这里是:任何人,从最无知的业余爱好者到最好的密码学家,都可以创建一个他自己无法打破的算法。这适用于您可能提出的整个安全方案,除非您的名字是或或Bruce等。感谢您的精彩见解。那么,为什么你认为我在问这个问题?我认为,在不知道密钥流的情况下,打破一个随机字符串是相当困难的,但我想这是一门科学。我想你可以解密这个吗?ù±;§TfÆ|]µ»请不要关闭此问题;我想在周末做一次密码分析并写一个答案。流密码不是一个完美定义的术语,但我不会称之为流密码,因为密钥必须至少是明文的三倍长。密钥流通常由短密钥确定地生成。我认为datenwolf说这是一个过于复杂的OTP是正确的。流密码是一个OTP lite,具有确定生成的密钥流。真正的OTP有一个纯粹随机的密钥流。在这两种情况下,密钥流都和明文一样长。谢谢。我的印象是,SystemRandom for a RNG非常适合这种用途,但是?SystemRandom如果实现,可能是安全的,这取决于底层操作系统secure RNG的安全性。请注意,SecureRandom的文档说明该序列是不可复制的,因此如果要解密,则需要保留整个密钥流。这就是为什么具有短密钥的流密码比具有与消息长度相同密钥的OTP更容易使用的原因。