Python 3.x 从sting生成用于加密的整数,反之亦然
我正在尝试用python3编写RSA代码。我需要将用户输入字符串(包含任何字符,而不仅仅是数字)转换为整数,然后对它们进行加密。在Python3.6中,如果没有第三方模块,将sting转换为整数的最佳方法是什么?如何将字符串编码为整数远不是唯一的。。。有很多方法!这是其中之一:Python 3.x 从sting生成用于加密的整数,反之亦然,python-3.x,rsa,Python 3.x,Rsa,我正在尝试用python3编写RSA代码。我需要将用户输入字符串(包含任何字符,而不仅仅是数字)转换为整数,然后对它们进行加密。在Python3.6中,如果没有第三方模块,将sting转换为整数的最佳方法是什么?如何将字符串编码为整数远不是唯一的。。。有很多方法!这是其中之一: strg = 'user input' i = int.from_bytes(strg.encode('utf-8'), byteorder='big') 那么,在另一个方向上的转换是: s = int.to_byte
strg = 'user input'
i = int.from_bytes(strg.encode('utf-8'), byteorder='big')
那么,在另一个方向上的转换是:
s = int.to_bytes(i, length=len(strg), byteorder='big').decode('utf-8')
是的,在转换回之前,您需要知道结果字符串的长度。如果
length
太大,字符串将从左侧填充chr(0)
(使用byteorder='big'
);如果length
太小,int.to_bytes
将引发一个溢出错误:int太大而无法转换
,@hiro主角的答案需要知道字符串的长度。所以我试图在这里找到另一个解决方案和好的答案:。我在此总结了我最喜欢的解决方案:
def str2num(string):
return int(binascii.hexlify(string.encode("utf-8")), 16)
def num2str(number):
return binascii.unhexlify(format(number, "x").encode("utf-8")).decode("utf-8")
def numfy(s, max_code=0x110000):
# 0x110000 is max value of unicode character
number = 0
for e in [ord(c) for c in s]:
number = (number * max_code) + e
return number
def denumfy(number, max_code=0x110000):
l = []
while number != 0:
l.append(chr(number % max_code))
number = number // max_code
return ''.join(reversed(l))
有趣的是:测试一些案例表明
如果ord小于128,则str2num=numfy(s,max_code=256)
及
str2num(s)=int.from_字节(s.encode('utf-8'),byteorder('big'))(@hiro protation的答案)
int('123')
?或者您指的是什么类型的字符串?用户输入的任何字符串。您是否尝试过查看将字符转换为ascii值的ord()
函数?您将字符串转换为字节序列,然后将其转换为大整数。希望你写RSA是为了教育目的,而不是为了使用。你能提供你的源代码吗?在我看来,这是一个加密问题,而不是字符串->整数转换。谢谢,这正是我需要的!你应该知道做反向操作的明文的长度?