【python】文件加密

有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:

在这里插入图片描述

加密字母的对应关系如下:

在这里插入图片描述

其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。

输入形式
从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。

输出形式
加密后结果输出到文件output.txt中。

样例
【样例输入】

feather
和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:
c language is wonderful.
【样例输出】加密后output.txt文件中内容为:

a ufqzjfzh xl gpqthmrju.

题解:首先是去重操作,本题由于对时间复杂都要求不高,所以可以采用朴素的时间复杂度为O(N2)的查找去重,先选一个字母,然后把该字母后面的相同的元素全部变为0,之后在遍历一遍,输出非零字母。然后是反序追加,同样也是采用朴素的算法,在去重数组里出现过的字母就不追加,否则就追加,追加完成后变成加密数组。最后是加密,通过加密数组实现就行了。

s=input()
zimu="abcdefghijklmnopqrstuvwxyz"
zimu=zimu[::-1]#逆序
t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]
with open('encrypt.txt','r')as f:
    data = f.read()
s1=""
res=""
l= len(s)
for i in range(l):#去重
    if(s[i]>='a' and s[i]<='z'):
        if t[ord(s[i])-ord('a')]==0:
            s1=s1+s[i]
            t[ord(s[i])-ord('a')]=1
        else:
            continue

#print(data[ord(data[0])-ord('a')])
for i in range(26):
    if t[ord(zimu[i])-ord('a')]==0:
        s1=s1+zimu[i]
        t[ord(zimu[i]) - ord('a')] =1

l= len(data)
for i in range(l):#加密
    if(data[i]>='a' and data[i]<='z'):
        res=res+s1[ord(data[i])-ord('a')]
    else:
        res = res + data[i]
with open('output.txt','w')as f:
    f.write(res)
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白驹_过隙

听说打赏的都进了福布斯排行榜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值