【发布时间】:2020-04-28 20:04:47
【问题描述】:
我正在创建一个程序,使用我创建的方法将他的信息保存为编码信息。
基本上,当我启动程序时,它会创建两个变量,
- 一个是字母表(大写、小写、数字……)
- 另一个完全相同,只是我使用
random.shuffle()对其进行随机化。
这是“钥匙”的“钥匙”,我使用random.randint(1000000000,9999999999) 给它一个随机数,这个数字我称之为“钥匙”的名称。
所有密钥及其名称都存储在一个文件中。
在程序中,您有机会编写名称之类的内容,该名称将使用我启动程序时生成的密钥进行加密,然后与密钥名称一起存储在一个文件中。
(请注意,密钥始终具有不同的名称,加密数据可能已使用相同密钥多次加密,然后存储在另一个文件中)。
我先从密钥文件中读取
{注意:密钥使用 \n 模式存储,例如 file.write(f'{key}\n{key_name}\n') }
使用我的方法,长度总是可以被 2 整除,所以我使用在 for 循环之前初始化的变量并随着循环增加它,同时我使用相同的变量从列表中读取(读取密钥的结果文件)并为键分配名称,例如:
{4819572: 'varoabIfokdbKjs3918', 40101846: 'opqihduqv', 8291073: 'hqowirhwip', ...}
我的密钥长度为 354 个字符,所以这些只是一个非常小的示例。
这是上面描述的代码
sep = os.sep
Ot = platform.system()
file_name = os.path.basename(__file__)
path_to_file = __file__.replace(file_name, '')
with open(f'{path_to_file}database{sep}history.dll', 'r', encoding='utf-8') as file:
keys = file.readlines()
num = 0
archive = {}
for _ in range(int(len(keys)/2)):
key_name = str(keys[num+1]).replace('\n','')
key = str(keys[num]).replace('\n','')
archive[int(key_name)] = key
num =+ 2
num1 = 0
num2 = 0
在此之后,我使用key_name 来获取解密函数中使用的密钥以及加密文本。
问题是,即使我在字典中有 16 个键,也只有 2 个。我真的不知道如何解决这个问题,也不知道为什么要添加这个。
【问题讨论】:
-
int(len(keys)/2)是一种冗长的写法len(keys)//2 -
@JohnColeman /2 和 //2 有什么区别?
-
//是整数除法。
标签: python python-3.x file dictionary encryption