[英]How can I change sha1 in base64 encoding in swift?
我必須將字符串轉換為 sha1,然后使用 base64。 只需base64_encode(sha1(My_String))
。 我想這樣做,但我無法正確修復它。 我可以使用該代碼轉換 SHA1: let firstTry = SHA1.hash(from: "call")
但是當我嘗試在 base64 中創建它時,它給出了錯誤,即不允許使用字符串。 如何轉換base64? 感謝您的關注。
我嘗試使用該代碼將 c[all] 轉換為 sha1 :
let str = "c[all]"
let den3 = str.sha1()
它的工作良好並返回正確的是:0fee061faab109e27b75010f2f1a0d8258bab7c5
當我添加let den3 = str.sha1().toBase64()
我得到 MGZlZTA2MWZhYWIxMDllMjdiNzUwMTBmMmYxYTBkODI1OGJhYjdjNQ== 這實際上是錯誤的我需要得到那個: D+4GH6qxCeJ7dQEPL8U=UNgli6t
我的問題在哪里?
這是我的擴展
extension String {
func sha1() -> String {
let data = Data(self.utf8)
var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA1($0.baseAddress, CC_LONG(data.count), &digest)
}
let hexBytes = digest.map { String(format: "%02hhx", $0) }
return hexBytes.joined()
}
func toBase64() -> String {
return Data(self.utf8).base64EncodedString()
}
}
你可以像這樣使用 CryptoKit
import CryptoKit
let str: String = "Hello, world!"
//Get the SHA1 hash
let hash = Insecure.SHA1.hash(data: str.data(using: .utf8)!)
//Get string representation of the hash (matches hash.description)
let hashedString = hash.map({ String(format: "%02hhx", $0) }).joined()
//Get the base64 string
let encodedString = hashedString.data(using: .utf8)!.base64EncodedString()
在 iOS 13+ 上,您可以按如下方式使用CryptoKit
:
import CryptoKit
extension String {
func base64EncodedSHA1Hash(using encoding: Encoding = .utf8) -> String? {
guard let data = data(using: encoding) else { return nil }
let hash = Data(Insecure.SHA1.hash(data: data))
return hash.base64EncodedString()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.