英文:
MD5: Why am I getting different results for the same string?
问题
我期望以下代码在每种情况下返回相同的结果,因为字符串值相同,但实际上每次都返回了不同的结果。我可以采取什么措施(如果有的话)来解决这个问题?
import hashlib
a = 'some text'
b = 'some text'
hashA = hashlib.md5(b'{a}').hexdigest()[:8]
hashB = hashlib.md5(b'{b}').hexdigest()[:8]
hashT = hashlib.md5(b'some text').hexdigest()[:8]
print(hashT) # 552e21cd
print(hashA) # e78fce13
print(hashB) # 09b94c63
print (a==b) # True
这段代码中,您使用了'{a}'
和'{b}'
,这会将a
和b
视为普通的字符串,而不是变量的值。为了修复这个问题,您应该使用字符串的format
方法,将a
和b
的值插入到哈希计算中。下面是修复后的代码:
import hashlib
a = 'some text'
b = 'some text'
hashA = hashlib.md5(b'{a}'.format(a=a).encode()).hexdigest()[:8]
hashB = hashlib.md5(b'{b}'.format(b=b).encode()).hexdigest()[:8]
hashT = hashlib.md5(b'some text').hexdigest()[:8]
print(hashT) # 552e21cd
print(hashA) # 552e21cd
print(hashB) # 552e21cd
print(a==b) # True
这样,您应该获得相同的结果。
英文:
I expected the following code to return the same result in each case since the string values are the same but instead got a different result each time. What can I do (if anything) to address this?
import hashlib
a = 'some text'
b = 'some text'
hashA = hashlib.md5(b'{a}').hexdigest()[:8]
hashB = hashlib.md5(b'{b}').hexdigest()[:8]
hashT = hashlib.md5(b'some text').hexdigest()[:8]
print(hashT) # 552e21cd
print(hashA) # e78fce13
print(hashB) # 09b94c63
print (a==b) # True
答案1
得分: 3
因为前缀是f用于格式化字符串。a、b和'some text'是不同的。
英文:
Because the prefix is f for formatted strings. a, b and 'some text' are different.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论