使用decode()遇无效起始字节错误,SHA256哈希解码问题求助
解决哈希时的UnicodeDecodeError问题
嘿,这个问题我太熟了!你遇到的UnicodeDecodeError本质原因是哈希的digest()方法返回的是原始二进制字节流,这些字节并不是合法的UTF-8编码——毕竟哈希算法输出的是随机的二进制数据,大部分字节组合都不符合UTF-8的编码规则,所以直接解码肯定会报错。
你想要的那种类似4ac2e277734c1e9e21616d7cb9bfa777b8a765af4f48e19ebac12c4173149618的十六进制哈希字符串,根本不需要用digest()再解码,直接用hashlib提供的hexdigest()方法就行!这个方法会直接把二进制哈希结果转换成十六进制的字符串,完美匹配你的需求。
具体修改步骤
把你出错的那行代码:
var_hash = str(newhash.digest().decode(), errors = 'ignore') ## errors occur here
替换成:
var_hash = newhash.hexdigest()
这样就能直接得到你想要的十六进制格式哈希字符串,完全不需要处理编码解码的问题。
为什么之前的编码尝试没用?
你试过的latin-1、utf-16等编码,虽然能把二进制字节转换成字符串,但得到的是乱码一样的字符(比如latin-1会把0xf2转成ò),这根本不是你需要的十六进制哈希格式,所以肯定不符合预期。
额外的小建议
- 你的代码里用到了
random.randint(),但没有导入random模块,记得在开头加上import random; - 递归调用
membership()可能会导致栈溢出,建议用循环代替递归; - 操作文件时最好用
with语句,它会自动帮你关闭文件,避免资源泄漏:with open('login.csv','r+') as login: # 你的代码逻辑放在这里
内容的提问来源于stack exchange,提问作者M S
相关产品推荐
相关产品推荐

