【发布时间】: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