python,用较小的密钥加密任何大小的代码

2024-04-26 01:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在努力创建一个程序,它可以接受两个输入,比如

encrypt('12345','12')

它会回来的

^{pr2}$

其中,代码('12345'),并由键('12')递增,从右到左。在

我已经创建了一个当代码和键都是8长时可以工作的,但是我不能计算出如果代码允许任何大小,可能有嵌套的for语句,如何做到这一点?在

我是想让你早点做的更好

^{3}$

Tags: 代码程序for语句encryptpr2
1条回答
网友
1楼 · 发布于 2024-04-26 01:21:11

在Python3.2上测试的一些代码:

from decimal import Decimal
import itertools

def encrypt(numbers_as_text, code):
    key = itertools.cycle(code[::-1])

    num = Decimal(numbers_as_text)

    power = 1
    for _ in numbers_as_text:
        num += power * int(next(key))
        power *= Decimal(10)

    return num



if __name__ == "__main__":
    print(encrypt('12345','12'))

一些解释:

  • code[::-1]是反转字符串的一种很酷的方法。Stolen from here
  • ^{} endlessly repeats your key。所以变量key现在包含一个生成器,它产生212121,等等
  • ^{} is a datatype which can handle arbitrary precision numbers。实际上,python3的整数就足够了,因为它们可以处理任意位数的整数。将类型名作为函数Decimal()调用该类型的constructor,并以此创建该类型的新对象。Decimal()构造函数可以处理一个参数,然后将其转换为十进制对象。在本例中,numbers_as_text字符串和整数10都转换为^{} with its constructor类型。在
  • power是一个变量,它以1开始乘以{},我们处理过的每一个数字(从右边算起)。它基本上是一个指针,指向我们需要在当前循环迭代中修改num的位置
  • for循环头确保我们对给定输入文本中的每个数字进行一次迭代。我们也可以使用类似for index in range(len(numbers_as_text))的东西,但这不必要地复杂

当然,如果你想编码文本,这种方法是行不通的。但因为这不在你的问题规范中,这是一个专注于处理整数的函数。在

相关问题 更多 >