使用 decode() 时起始字节无效
Invalid start byte when using decode()
作为一个项目,我一直在尝试编码、解码和散列;我每次都遇到这个常见错误,我测试了这个程序。
第 var_hash = str(newhash.digest(), encoding = 'utf-8')
行的错误是 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf2 in position 0: invalid continuation byte
在程序中,我使用了一个导入用户详细信息的文件。
散列密码的预期格式应为:4ac2e277734c1e9e21616d7cb9bfa777b8a765af4f48e19ebac12c4173149618
我尝试了其他 encoding/decoding 方法,例如 latin-1 和 utf-16,但结果不正确
代码:
import hashlib
salt = ['1AsnOZtM41','M6IQQD4fRb','XgJbmMhlg9']
login = open('login.csv','r+')
## Login format = [USERNAME,PASSWORD,SALTNUMBER]
def membership(): ## Membership Function
linevarc = ''
newusr = input('Enter your username: ')
newpass = input('Enter your password: ')
newhash = hashlib.sha256() ## Sets hash algorithm to sha256
newrand = random.randint(0,2) ## Picks random salt
for line in login:
newlog = line.split(',')
if newusr.upper() == newlog[0]:
print('This username is already taken, Please re-enter all details')
login.seek(0)
membership()
login.seek(0)
for line in login:
save = line.split(',')
if newusr.upper() != newlog[0]:
linevarc = linevarc + save[0] + ',' + save[1] + ',' + save[2] + '\n'
print(str(linevarc))
#login.write(str(newdetails))
login.seek(0)
for line in login:
if newusr.upper() != newlog[0]:
passalter = str(newpass + salt[int(newrand)])
newhash.update(passalter.encode('utf-8'))
var_hash = str(newhash.digest().decode(), errors = 'ignore') ## errors occur here
linevarc = linevarc + newusr.upper() + ',' + var_hash + ',' + str(newrand)
print(str(linevarc))
尝试将 newhash.digest()
更改为 newhash.hexdigest()
。使用 .digest()
输出是二进制的,通常不是 utf8 可解码的。 .hexdigest()
returns 十六进制摘要。
作为一个项目,我一直在尝试编码、解码和散列;我每次都遇到这个常见错误,我测试了这个程序。
第 var_hash = str(newhash.digest(), encoding = 'utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf2 in position 0: invalid continuation byte
在程序中,我使用了一个导入用户详细信息的文件。
散列密码的预期格式应为:4ac2e277734c1e9e21616d7cb9bfa777b8a765af4f48e19ebac12c4173149618
我尝试了其他 encoding/decoding 方法,例如 latin-1 和 utf-16,但结果不正确
代码:
import hashlib
salt = ['1AsnOZtM41','M6IQQD4fRb','XgJbmMhlg9']
login = open('login.csv','r+')
## Login format = [USERNAME,PASSWORD,SALTNUMBER]
def membership(): ## Membership Function
linevarc = ''
newusr = input('Enter your username: ')
newpass = input('Enter your password: ')
newhash = hashlib.sha256() ## Sets hash algorithm to sha256
newrand = random.randint(0,2) ## Picks random salt
for line in login:
newlog = line.split(',')
if newusr.upper() == newlog[0]:
print('This username is already taken, Please re-enter all details')
login.seek(0)
membership()
login.seek(0)
for line in login:
save = line.split(',')
if newusr.upper() != newlog[0]:
linevarc = linevarc + save[0] + ',' + save[1] + ',' + save[2] + '\n'
print(str(linevarc))
#login.write(str(newdetails))
login.seek(0)
for line in login:
if newusr.upper() != newlog[0]:
passalter = str(newpass + salt[int(newrand)])
newhash.update(passalter.encode('utf-8'))
var_hash = str(newhash.digest().decode(), errors = 'ignore') ## errors occur here
linevarc = linevarc + newusr.upper() + ',' + var_hash + ',' + str(newrand)
print(str(linevarc))
尝试将 newhash.digest()
更改为 newhash.hexdigest()
。使用 .digest()
输出是二进制的,通常不是 utf8 可解码的。 .hexdigest()
returns 十六进制摘要。