首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSA python加密

RSA python加密
EN

Stack Overflow用户
提问于 2022-10-17 04:33:02
回答 1查看 74关注 0票数 0

(对于学校)我试图做一个简单的RSA加密,将字符串加密成三个字母块。我可以更改什么来让数学处理字符串而不仅仅是整数?

代码语言:javascript
复制
import math

message = str(input("Enter Plaintext: "))

p = 521
q = 757
e = 11
n = p*q

def encrypt(me):
    en = math.pow(me, e)
    c = en % n
    print("Encrypted Message is: ", c)
    return c

print("Original Message is: ", message)
c = encrypt(message)
代码语言:javascript
复制
Enter Plaintext: zallaboardty
Original Message is:  zallaboardty
代码语言:javascript
复制
line 18, in <module>
    c = encrypt(message)
line 11, in encrypt
    en = math.pow(me, e)
TypeError: must be real number, not str

Process finished with exit code 1
EN

回答 1

Stack Overflow用户

发布于 2022-10-17 16:02:25

教科书RSA中的消息大小取决于模块的大小。所以你有一个模数n,是521x757。这允许log_2(521x757)/3=每字符6.19位。因此,每个字符只能占用6位,即在[0..2^6) =[0.64]字符范围内。ASCII是每个字符7位,所以这有点烦人,因为我们不能直接使用它。

让我们简单一点,用小数表示。我们可以计算出n为521x757= 394397。这意味着我们可以通过连接三个两位数来构造n以下的一个数字,只要它低于394397。如果我们使用39或以下的数字,这将总是有效的。我们现在可以创建最多40个字符的字母表(因为我们可以包含零)。

让我们为包含ABC的28个字符的字母表定义一个字母SPACE=0、A=1...Z=26和DOT=27。太好了,所以现在我们只需要先把一条消息转换成索引,上面写着:"HELLO“。可分为"HEL“、"LO”、"WOR“和”LD“。取H="08",E="05“en L=12,所以我们得到的数字是" 080512”或080512。很好,您现在有了一个可以由RSA处理的数字。请注意,这些数字必须用零填充,才能使此方案工作。

现在小数点使用的是基数10。你也可以使用基数2^6 (记住上面每个字符的~6.19位),然后用二进制来创建一个数字。然而,对于初学者来说,更容易混淆小数和字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74092611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档