【问题标题】:How to have the decryption function of this encryption function in python如何在python中有这个加密函数的解密函数
【发布时间】:2018-12-30 02:19:01
【问题描述】:

如果这是一个加密函数:

(ascii_value % a_ big_ prime_number + a_number_of_ user’s_choice)

将加密字符串转换为原始字符串的相反解密函数是什么以及如何在python中实现它。

加密功能如下:

def encrypt_function(string):

    encrypted_string = ''
    user_input = int(input('Enter an integer'))

    for c in string:
        encrypted_string += chr((ord(c) % 173 + user_input))

    return encrypted_string

encrypt_function('hello')

输出将类似于 user_input = 150 的 'þûĂĂą',如何创建一个返回原始字符串 'hello' 并使用 173 以外的其他素数的方法。

【问题讨论】:

  • 你做了什么?问题是什么?向我们展示您的一些代码。
  • @ArashKazemi 我提供了加密功能,我想要的是取回原始字符串的相反功能

标签: python string encryption hash hashmap


【解决方案1】:

代码没有正确缩进。我相信正确的代码应该是这样的:

def encrypt_function(string):

    encrypted_string = ''
    user_input = int(input('Enter an integer'))

    for c in string:
        encrypted_string += chr((ord(c) % 173 + user_input))

    return encrypted_string

指出代码中的缺陷:

  1. ord(c) 输出范围 (0,255) 内的整数。因此,如果您使用代码中所示的 ord(c)%173,您将拥有多对一映射,并且无法解密(因为在您提到的示例中 A(它的 ord is 0x41(65 in base 10)0xee(238 in base 10)).它可以是蛮力的,即检查所有可能的值,但如果你的字符串的长度是 10 并且假设每个都有 2 个(这将基于你选择的素数)映射,所以你可能必须检查 2^10 个组合,这可能会变得很棘手) .

  2. encrypted_string += chr((ord(c) % 173 + user_input)) 行中,您将 ord(c)%173 添加到用户输入的整数中。 ord(c) % 173 + user_input 的值有可能超过 255(chr() 函数的范围是 (0,255) 包括在内)

有关详细信息,请参阅文档:

ord() 可以找到 here 和 chr() 可以找到here

【讨论】:

    【解决方案2】:

    如果ascii_value 只是一个介于 0 和 127 之间的数字(正如名称 ascii_value 所暗示的那样),您可以只减去 user_input 并取回原始值,假设 user_input 大于 127。

    这是有效的,因为如果 a n (并且两个数字都是正数),那么 a % n总是等于 a。另一方面,如果 n 不够大,则存在不可挽回的信息丢失。简而言之,这是一个非常糟糕的加密方案。

    【讨论】:

    • 谢谢,工作正常。就加密方案而言,这是一个学校作业,问题是:创建一个脚本以使用简单的哈希函数加密您的 asci 数据,例如(asci_value% a_big_prime_ number + a_number_of_user's_choice.)和哈希您的输入至少两到三倍
    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多