我无法在 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')