我正在尝试在python3中编写RSA代码。我需要将用户输入字符串(包含任何字符,而不仅仅是数字)转换为整数,然后加密它们。在没有第三方模块的情况下,在Python 3.6中将sting转换为整数的最佳方法是什么?
答案 0 :(得分:5)
如何将字符串编码为整数远非独特......有很多方法!这是其中之一:
if (spellChecker.exist(wordForSuggestions)) {
//do what you want for an, apparently, correctly spelled word
}
其他方向的转换是:
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
。
答案 1 :(得分:0)
@hiro主角的答案需要知道字符串的长度。因此,我尝试在此处找到另一种解决方案和好的答案:Python3 convert Unicode String to int representation。我在这里总结一下我最喜欢的解决方案:
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(s [i])<128,则str2num(s)= numfy(s,max_code = 256)
和
str2num(s)= int.from_bytes(s.encode('utf-8'),byteorder ='big')(@hiro主角的回答)