Python 3.x 从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

我正在尝试用python3编写RSA代码。我需要将用户输入字符串(包含任何字符,而不仅仅是数字)转换为整数,然后对它们进行加密。在Python3.6中,如果没有第三方模块,将sting转换为整数的最佳方法是什么?

如何将字符串编码为整数远不是唯一的。。。有很多方法!这是其中之一:

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是为了教育目的,而不是为了使用。你能提供你的源代码吗?在我看来,这是一个加密问题,而不是字符串->整数转换。谢谢,这正是我需要的!你应该知道做反向操作的明文的长度?