![](/img/trans.png)
[英]How can I compute a SHA-2 (ideally SHA 256 or SHA 512) hash in iOS?
[英]How can I Base64 UrlEncode a SHA256 Hash of a string in Haskell?
這是為PKEC OAuth工作流創建代碼質詢和驗證程序。
以下似乎應該工作(使用cryptonite
):
import System.Random (newStdGen, randomRs)
import Crypto.Hash (Digest, hash)
import Crypto.Hash.Algorithms (SHA256)
x = do
gen <- newStdGen
codeVerifier = C.pack . take 128 $ randomRs ('0', 'z') gen
codeChallenge = show (hash codeVerifier :: Digest SHA256)
print codeChallenge
但唉,事實並非如此。 所以我會發布我經過多次痛苦和辛勞后終於解決的答案。
而OAuth工作流程所期望的答案是......滾動~~~
import System.Random (newStdGen, randomRs)
import Data.ByteArray.Encoding
import Crypto.Hash.Algorithms
import Crypto.Hash
-- | This is a custom sort of urlEncode that simply replaces bad characters
urlEncode :: String -> String
urlEncode [] = ""
urlEncode ('=':xs) = urlEncode xs
urlEncode ('+':xs) = '-' : urlEncode xs
urlEncode ('/':xs) = '_' : urlEncode xs
urlEncode (x : xs) = x : urlEncode xs
codeVerifier = C.pack . take 128 $ randomRs ('a', 'z') gen
codeChallenge = urlEncode . C.unpack $ (convertToBase Base64 (hashWith SHA256 codeVerifier) :: ByteString)
OP代碼中的問題是base64對String
編碼,其中此代碼等待將哈希值轉換為String
,因此您實際上將hash64直接編碼為ByteArray
。
無論如何,這踢了我的屁股,特別是因為我使用的auth服務堅持我的錯誤是invalid_grant
。 它一直在告訴我,我有一個invalid_grant
?! 無論如何,我突然出現了幾條白發,所以我想幫助下一個不幸的靈魂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.