【问题标题】:How to convert a test message to an integer number to produce ciphertext in RSA如何将测试消息转换为整数以在 RSA 中生成密文
【发布时间】:2020-11-15 09:54:01
【问题描述】:

函数ConvertToInt(message) 应该将文本消息转换为整数,以便可以使用公式 M^e mod n 生成 RSA 中的密文。这里 M 是必须编码为单个数字的消息。相反,我的以下函数 ConvertToInt 返回一个包含元素的数组,每个元素都是字符的 ASCII 值。所以结果变成了逐字符加密而不是字符串。

将消息转换为整数并计算正确的 RSA 加密结果的正确方法是什么?

这是我的代码:

def ConvertToInt(message):
    l = len(message)
    arra = []
    i = 0
    while(i<l):
        j=ord(message[i])
        arra.append(j)
        i += 1
    return arra

def mod_ex(b, k, m):

    i = 1
    j = 0
    while(j<=k):
        b = (b*i) % m
        i = b
        j += 1
    return b
def PowMod(s,modulo,exponent):

    bin_e = bin(exponent)
    bin_e = bin_e [::-1]
    ln = len(bin_e)
    result = 1
    slen = len(s)
    for i in range(0,slen,+1):
        for j in range(0,ln-2,+1):
            if(bin_e[j]=='1'):
                result *= mod_ex(s[i],j,modulo)
        s[i] = result%modulo
        result = 1
    return s

def Encrypt(message, modulo, exponent):

  s = ConvertToInt(message)
  return PowMod(s, modulo, exponent)

x = Encrypt("Aa",473,17)
print(x)

【问题讨论】:

  • “and I got this wrong”不是正确的错误,您遇到什么问题?
  • 操作!我应该更清楚一点.. 在 RSA 加密的情况下,对文本消息进行编码以应用 M^e mod n 的正确方法是什么?以及加密后的整数输出是什么样的。我迫切需要一个输入输出的例子,所以这样做......
  • 如果我的输入是“Attack”,则数组将返回“285,19,19,213,....”但是如果我将其作为字符串返回“2851919213....”那么它将无法解密。但是如果我以“285019019213..”返回,现在我可以解密(n-1 = 472 = 3,取 3 x 3 位解密)但是如果 n 太大,加密字符串中有很多 0。那么正确的方法是什么

标签: python encryption encoding rsa converters


【解决方案1】:

这是一个 ConvertToInt 函数,它可以有效地从字符串中计算出一个数字,可用于 RSA 加密,cz RSA 加密必须需要一个数字才能操作。

def ConvertToInt(message):
grd = 1
num = 0
message = message [::-1]
for i in range(0,len(message),+1):
    num = num+ord(message[i])*grd
    grd *= 256
return num

在此处获取完整的 Python RSA 代码:

【讨论】:

    【解决方案2】:

    我认为这取决于您的应用程序。但是,由于我们经常使用加密进行通信,因此最好使用与通信系统更兼容的Encoding。例如,Base64 是用于加密方案(对称或非对称)的流行编码之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 2018-09-05
      • 2015-09-08
      • 2021-12-16
      • 1970-01-01
      • 2011-03-06
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多