从sting生成用于加密的整数,反之亦然

时间:2017-06-12 16:30:55

标签: python-3.x rsa

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

2 个答案:

答案 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主角的回答)