我无法在 Python 中将十六进制转换为字符串
I can't convert hex to string in Python
所以我完成了这段代码(这只是将字符串转换为十六进制的部分),当我尝试解密时,我收到这条消息:找到非十六进制数字
这是十六进制代码的字符串:
def password (pslen):
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+}{:|?><,./;'\[]"
pw_length = pslen
mypw = ""
for i in range(pw_length):
next_index = random.randrange(len(alphabet))
mypw = mypw + alphabet[next_index]
print ("Password: ",mypw)
parolaBin = bin(int.from_bytes(mypw.encode(), 'big'))
parolaHex = hex(int(parolaBin, 2))
return parolaHex
这里是十六进制字符串代码
pw = binascii.unhexlify(pw)
程序从文件中读取 pw。
该程序要大得多,但这是让我卡住并且无法运行的部分。
我用来将字符串转换为十六进制的方法有效,但十六进制转换为字符串却没有。
有人可以帮我吗?
您正在使用 hex()
函数将整数转换为十六进制:
parolaHex = hex(int(parolaBin, 2))
这包括一个 0x
前缀,它不是十六进制值。这就是 binascii.unhexlify()
所抱怨的:
>>> import binascii
>>> binascii.unhexlify('0xff')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
binascii.Error: Non-hexadecimal digit found
>>> binascii.unhexlify('ff')
b'\xff'
简单地删除该前缀,或者首先不使用 format(integer, 'x')
生成它:
parolaHex = format(int(parolaBin, 2), 'x')
您生成十六进制随机密码的方法……太冗长了。您可以只生成随机的十六进制数字:
import string
return ''.join([random.choice(string.hexdigits) for _ in range(pwlen)])
并以更少的工作量获得相同的结果。无论如何,首先将整数转换为二进制表示法,然后将其 back 转换为整数:
parolaBin = bin(int.from_bytes(mypw.encode(), 'big'))
parolaHex = hex(int(parolaBin, 2))
当然只是让你的CPU在晚上保持温暖。您可以直接使用十六进制:
parolaHex = format(int.from_bytes(mypw.encode(), 'big'), 'x')
所以我完成了这段代码(这只是将字符串转换为十六进制的部分),当我尝试解密时,我收到这条消息:找到非十六进制数字
这是十六进制代码的字符串:
def password (pslen):
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+}{:|?><,./;'\[]"
pw_length = pslen
mypw = ""
for i in range(pw_length):
next_index = random.randrange(len(alphabet))
mypw = mypw + alphabet[next_index]
print ("Password: ",mypw)
parolaBin = bin(int.from_bytes(mypw.encode(), 'big'))
parolaHex = hex(int(parolaBin, 2))
return parolaHex
这里是十六进制字符串代码
pw = binascii.unhexlify(pw)
程序从文件中读取 pw。
该程序要大得多,但这是让我卡住并且无法运行的部分。
我用来将字符串转换为十六进制的方法有效,但十六进制转换为字符串却没有。
有人可以帮我吗?
您正在使用 hex()
函数将整数转换为十六进制:
parolaHex = hex(int(parolaBin, 2))
这包括一个 0x
前缀,它不是十六进制值。这就是 binascii.unhexlify()
所抱怨的:
>>> import binascii
>>> binascii.unhexlify('0xff')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
binascii.Error: Non-hexadecimal digit found
>>> binascii.unhexlify('ff')
b'\xff'
简单地删除该前缀,或者首先不使用 format(integer, 'x')
生成它:
parolaHex = format(int(parolaBin, 2), 'x')
您生成十六进制随机密码的方法……太冗长了。您可以只生成随机的十六进制数字:
import string
return ''.join([random.choice(string.hexdigits) for _ in range(pwlen)])
并以更少的工作量获得相同的结果。无论如何,首先将整数转换为二进制表示法,然后将其 back 转换为整数:
parolaBin = bin(int.from_bytes(mypw.encode(), 'big'))
parolaHex = hex(int(parolaBin, 2))
当然只是让你的CPU在晚上保持温暖。您可以直接使用十六进制:
parolaHex = format(int.from_bytes(mypw.encode(), 'big'), 'x')