【问题标题】:How to 'encrypt' a file如何“加密”文件
【发布时间】:2015-08-24 06:22:43
【问题描述】:

刚刚把这个剪掉了很多

我有一个整体任务,必须读取一个文件,对其进行加密,然后将加密的数据写入一个新文件。

我试过的是这样的:

filename=input("Enter file name:")
fr=open(filename)
keep_going=0
data = fr.readline()
fw=open('encrypted_file.txt', 'w')
for x in range(len(data)):
    fw.write(data[x])       
fw.close()
fr.close()

【问题讨论】:

  • 你想用什么加密算法?
  • 任何加密算法都可以工作,只要我以后可以解密它。我尝试使用直接 data.replace 方法,但没有成功。
  • @Borja hashlib 不包含加密/解密功能。该库只能用于哈希计算
  • 刚刚包含了该作业的指南
  • 你具体坚持什么?

标签: python


【解决方案1】:

我建议您研究一下 Simple Crypt,这完全取决于您想要的安全级别。

如果我足够理解您的问题,Simple Crypt 应该可以完成您需要的工作。

https://pypi.python.org/pypi/simple-crypt

【讨论】:

  • 这需要相当多的工作。如果我对您的理解正确,您需要为您的密钥创建一个库,这是假设您希望在多个文件中使用同一个库。不太清楚为什么需要您自己的密钥,似乎您正在尝试重新发明轮子。
  • 我可以使用一个非常简单的键。例如:abcdefghijklmnopqrstuvwxyz --> qwertyuiopasdfghjklzxcvbnm
【解决方案2】:

这是我做的Vigenère Cipher的一个非常简单的实现:

from string import ascii_uppercase as alphabet

val = {}
for x in xrange(len(alphabet)):
    val[alphabet[x]] = x
    val[x] = alphabet[x]

encrypt = lambda a, b: ''.join(val[(val[a[i]]+val[b[i%len(b)]])%26] for i in xrange(len(a)))
decrypt = lambda a, b: ''.join(val[(val[a[i]]-val[b[i%len(b)]])%26] for i in xrange(len(a)))

a 是消息,b 是关键(我知道它写得有点简洁,但它是用于代码高尔夫比赛的)。那里有很多密码;你不必使用这个,而且可能不应该。它只是为了让你思考可能的方法来做这件事。我认为对您的目的有益的一个非常简单的密码是Caesar Cipher

我想指出的另一件事是,您的代码现在看起来不模块化——这是你老师的要求之一。我建议将其分解为打开文件的函数、执行实际 **cryption 的函数以及获取用户输入并调用其他函数的“main”函数。

祝你好运!

【讨论】:

  • 谢谢,我会这样做的。
【解决方案3】:

如果您的目标只是与您指定的其他人交换字符串中的字母,那么解决方案如下:

decrypted = 'abcdefghijklmnopqrstuvwxyz' #normal alphabet
encrypted = 'MNBVCXZLKJHGFDSAPOIUYTREWQ' #your "crypted" alphabet

#Encription
text = 'cryptme' #the string to be crypted
encrypted_text = ''
for letter in text:
    encrypted_text += encrypted[decrypted.find(letter)]
print encrypted_text
#will print BOWAUFC

#Decription
text = encrypted_text #"BOWAUFC" in this example
decrypted_text = ''
for letter in text:
    decrypted_text += decrypted[encrypted.find(letter)]
print decrypted_text
#will print cryptme

请注意,您的“加密字母表”不会转换任何空格或任何符号,而是小写字母,如果您的文本中有其他符号,您也必须包含它们。

但是,这不是加密任何东西的正确方法!正如其他人已经建议的那样,寻找合适的加密算法。

【讨论】:

  • 这是我一直在寻找的。我将不得不做更多的研究以找出正确的方法。非常感谢。
  • 建议:我建议不要使用str.find(),而是创建一个用于加密的字典映射和一个用于解密的dict(zip())
  • 是的,这可能是另一种方式。
猜你喜欢
  • 2010-12-26
  • 2011-11-03
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2011-02-19
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多