练习一:文本加密解密。 (先看有关ASCII码的相关知识以及码表,查维基百科或百度百科) 输入:一个txt文件(假设全是字母的英文词,每个单词之间用单个空格隔开,假设单词最长为10个字母) 加密:得到每个单词的长度n,随机生成一个9位的数字,将n-1与这个9位的数字连接,形成一个10位的数字,作为密匙key。依照key中各个数字对单词中每一个对应位置的字母进行向后移位(例:如过key中某数字为2,对应该位置的字母为a,加密则应移位成c,如果超过z,则回到A处继续移位),对长度不到10的单词,移位后,将移位后的单词利用随机字母补全到10个,最终形成以10个字母为一个单词,并以单个空格分割的加密文本,存入文件。 解密:给定该文本文件并给定key(10位数字),恢复原来的文本。 (提示,利用ord()及chr()函数,ord(x)是取得字符x的ASCII码,chr(n)是取得整数n(代表ASCII码)对应的字符。例:ord(a)的值为97,chr(97)的值为'a',因字母a的ASCII码值为97。)
In [ ]:
import random
fh=open(r'd:\temp\字母.txt')
text=fh.read()
fh.close()
words=[]
words=text.split(' ')
suiji=[]
for i in range(0,10):
suiji[i]=random(1,10)
for word in words:
key=[]
key[0]=len(word)-1
for i in range(1,11):
key[i]=suiji[i-1]
for j in range(0,10):
if len(word)==10:
if ord(word[j]+key[j])<123:
word[j]=chr(ord(word[j])+key[j])
else:
word[j]=chr(ord(word[j])+key[j]-122+97)
else:
if j<=len(word):
if ord(word[j]+key[j])<123:
word[j]=chr(ord(word[j])+key[j])
else:
word[j]=chr(ord(word[j])+key[j]-122+97)
else:
word[j]=chr(random(97,123))
fh=open(r'd:\temp\words_correct.txt', 'w')
fh.write('\n'.join(words))
fh.close()