费纳姆密码-二进制密码
来源:互联网 发布:gre数学难吗 知乎 编辑:程序博客网 时间:2024/05/16 07:54
步骤:
- 明文根据key转化为数字
- 数字和明(密)文进行XOR运算(这里是我自己的理解 XOR运算意味着加解密方法是一致的)
- 数字按组转化为密文
** key一般直接使用ascii二进制和英文的对照表
看了表哥写的代码很是羡慕 于是自己也想写一个试试 按照自己的思路历时接近一个半小时搞出来了
贴上自己的代码:
# coding: utf-8## Fenham ## _Bonjour_Python3#Check_List_2num = {'A':'1000001','B':'1000010', 'C':'1000011','D':'1000100', 'E':'1000101','F':'1000110', 'G':'1000111','H':'1001000', 'I':'1001001','J':'1001010', 'K':'1001011','L':'1001100', 'M':'1001101','N':'1001110', 'O':'1001111','P':'1010000', 'Q':'1010001','R':'1010010', 'S':'1010011','T':'1010100', 'U':'1010101','V':'1010110', 'W':'1010111','X':'1011000', 'Y':'1011001','Z':'1011010'}## key value对调Check_List_2char = {value:key for key,value in Check_List_2num.items()}## 转换def change2num(text): finish = [] for i in text: finish.append(Check_List_2num[i]) return finish## 分组处理字符def change2list(text): num = 0 str = [] while True: str.append(text[num:num+7]) num += 7 if(num > len(text) - 7): break return str## XOR运算 def XOR(text,key): finish = '' for i in range(0,len(text)): if text[i] == key[i]: finish += '0' else: finish += '1' return finish## 加解密# 读文本文件input = open('in.txt')try: text = input.read()finally: input.close()file = open('key.txt')try: key = file.read()finally: file.close()##转换keykey = change2num(key)key = ''.join(key)## 运算finish = XOR(text,key)## 转换字母finish = change2list(finish)str = ''for i in finish: str += Check_List_2char[i]print(str)
学到了几个小知识点 总结一下:
- Python读写文件
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( )
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法
** 读二进制文件
input = open('data', 'rb')
- key value对调
dict通过value找key
dict只能通过key找value 要是想通过value找key(在value不重复的前提下)一是可以通过遍历 二是把整个字典反过来生成一个新的dict(或取代原来的)
实现代码:
Check_List_2char = {value:key for key,value in Check_List_2num.items()}
- 对字符串进行分组处理:
def change2list(text): num = 0 str = [] while True: str.append(text[num:num+7]) num += 7 if(num > len(text) - 7): ##注意“-7” break return str
阅读全文
0 0
- 费纳姆密码-二进制密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 密码
- 【密码】
- 密码
- 密码
- 密码
- 同一个表中的数据怎么进行比较
- 重学数据结构 顺序表的添加 删除 算法2.4和2.5
- 推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
- CCF认证题——俄罗斯方块
- hashmap排序
- 费纳姆密码-二进制密码
- 【eclipse】eclipse属性配置(背景色字体等)文件的导入导出方法
- 16元日薪,从阿里云雇佣一个专家阿里云中小企业AI产品码栈解析
- Linux下的网络访问与权限
- 30分钟了解Enterprise Architect
- 容器技术与虚拟化技术理解
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例
- C语言用while求n!
- chinapay扫码支付