我正在嘗試將 ruby?? 專案的一部分移植到 python 并且無法弄清楚Base64.urlsafe_encode64(Digest::SHA256.hexdigest(STRING))我得到的 Closest的等價物base64.urlsafe_b64encode(hashlib.sha256(STRING.encode('utf-8')).digest())但是給出StackOverflow它回傳的輸入:b'HFqE4xhK0TPtcmK7rNQMl3bsQRnD-sNum5_K9vY1G98='對于 Python 和MWM1YTg0ZTMxODRhZDEzM2VkNzI2MmJiYWNkNDBjOTc3NmVjNDExOWMzZmFjMzZlOWI5ZmNhZjZmNjM1MWJkZg==在 Ruby 中。
完整的 Python 和 Ruby 代碼:
紅寶石
require "base64"
require "digest"
string= "StackOverflow"
output= Base64.urlsafe_encode64(Digest::SHA256.hexdigest(string))
puts output
Python
import hashlib
import base64
string = str("StackOverflow")
output = base64.urlsafe_b64encode(hashlib.sha256(string.encode('utf-8')).digest())
print(str(output))
uj5u.com熱心網友回復:
在您的原始 Python 代碼中,您使用digest的不是hexdigestwhich 會產生不同的結果,因為它不是一回事。請記住,將代碼轉換為不同的語言可能非常困難,因為您需要充分理解兩種語言才能比較代碼。嘗試逐段剖析代碼,分割行并列印每個字串輸出/在每個階段給出輸出以檢查發生了什么。
將所有內容塞入一行可能會很混亂,您很容易忽略可能在錯誤修復中起主要作用的不同因素。
您應該首先將代碼“隔開”撰寫,在生產中您可以將代碼更改為單行,盡管長代碼的可讀性不是很好。
您正在尋找的是:
string = str("StackOverflow")
output = hashlib.sha256(code_verifier.encode('utf-8')).hexdigest()
output = base64.urlsafe_b64encode(code_challenge.encode('utf-8'))
print(str(output.decode('utf-8')))
它給出了相同的結果,就好像您Base64.urlsafe_encode64(Digest::SHA256.hexdigest(string))在 ruby?? 中使用一樣。
uj5u.com熱心網友回復:
您需要使用該hexdigest方法而不是digestPython 中的哈希來獲得與 Ruby 示例中相同的輸出(因為您在hexdigest那里使用了該函式)。
另請注意,該hexdigest方法回傳的是字串而不是位元組,因此您需要再次對結果進行編碼(使用.encode("utf-8"))。
這是一個完整的例子:
import hashlib
import base64
string = "StackOverflow"
output = base64.urlsafe_b64encode(hashlib.sha256(string.encode("utf-8")).hexdigest().encode("utf-8"))
print(str(output))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474211.html
標籤:Python python-3.x 红宝石
