hashlib.digest()方法的Python解码问题

hashlib.digest()方法的Python解码问题,python,google-app-engine,decode,Python,Google App Engine,Decode,大家好,我的社区 使用Google App Engine,我在一个模型类(扩展db.model)中编写了一个keyToSha256()方法: 当显示输出时(最终在Django模板中),我会看到乱码文本,例如: �����_ɘ�!`�我�!�;�QeqN��艾尔�'二, 我期待着与此更一致的东西: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 我错过了什么重要的事情吗?尽管阅读了一些关于ASCII、Unicode、

大家好,我的社区

使用Google App Engine,我在一个模型类(扩展db.model)中编写了一个keyToSha256()方法:

当显示输出时(最终在Django模板中),我会看到乱码文本,例如:

�����_ɘ�!`�我�!�;�QeqN��艾尔�'二,

我期待着与此更一致的东西:

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08


我错过了什么重要的事情吗?尽管阅读了一些关于ASCII、Unicode、utf-8等的指南,但我认为我还远远没有掌握字符串编码/解码的秘密。在浏览StackOverflow并通过谷歌搜索见解之后,我想我应该在这里问这个问题。有什么想法吗?谢谢

改用
.hexdigest()

改用
.hexdigest()

太好了,谢谢Ignacio!我刚刚读到:我不明白为什么。digest()不会起作用。字符串对我来说太神秘了。
.digest()
确实给了你一个字符串,但它是原始字节。太好了,我完全理解了!对于像我这样没有经验的程序员来说,PythonDoc是一种误导,但是如果再阅读一遍,记住你的答案,就会让它更容易理解。我现在明白了“非二进制环境”的含义,我确信这在将来会很有帮助。我很惊讶有多少人认为像SHA1这样的散列函数的输出是十六进制字符串。无意冒犯OP-这是一个常见的误解。太好了,谢谢Ignacio!我刚刚读到:我不明白为什么。digest()不会起作用。字符串对我来说太神秘了。
.digest()
确实给了你一个字符串,但它是原始字节。太好了,我完全理解了!对于像我这样没有经验的程序员来说,PythonDoc是一种误导,但是如果再阅读一遍,记住你的答案,就会让它更容易理解。我现在明白了“非二进制环境”的含义,我确信这在将来会很有帮助。我很惊讶有多少人认为像SHA1这样的散列函数的输出是十六进制字符串。无意冒犯OP-这是一个常见的误解。
class Car(db.Model):
    def keyToSha256(self):
        keyhash = hashlib.sha256(str(self.key())).digest()
        return keyhash