是,無論是Python和R樣本代碼返回SHA256哈希的十六進制表示消化所傳遞的數據。
你需要切換R中的序列化的,否則你的digest()
包首先創建字符串的序列化而不是僅爲字符數據計算散列;設置serialize
到FALSE
:
> digest('', algo="sha256", serialize=FALSE)
[1] "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
> digest('hello world', algo="sha256", serialize=FALSE)
[1] "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
這些匹配他們的Python當量:
>>> import hashlib
>>> hashlib.sha256('').hexdigest()
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
>>> hashlib.sha256('hello world').hexdigest()
'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'
如果散列然後仍然R和Python的之間不同,則你的數據是不同。這可能在行尾是一個微妙的換行符,或者在開始時是字節順序標記。
在Python中,檢查print(repr(x))
的輸出以將數據表示爲Python字符串文字;這會將不可打印的字符顯示爲轉義序列。我確定R有類似的調試工具。在使用交互模式時,R和Python都會將字符串值作爲表示形式回顯。