Ios 如何在swift中更改base64编码中的sha1?

Ios 如何在swift中更改base64编码中的sha1?,ios,swift,xcode,api,Ios,Swift,Xcode,Api,我必须将字符串转换为sha1,然后使用base64。简单的base64_编码是我的字符串。我想这样做,但我不能正确地修复它。我可以用以下代码转换SHA1:let firstTry=SHA1.hashfrom:call,但当我尝试在base64中进行转换时,它给出了一个错误,即string not allowed。如何转换base64? 谢谢你的关注 我尝试使用该代码将c[all]转换为sha1: let str = "c[all]" let den3 = str.sha1() 其工作良好,返回

我必须将字符串转换为sha1,然后使用base64。简单的base64_编码是我的字符串。我想这样做,但我不能正确地修复它。我可以用以下代码转换SHA1:let firstTry=SHA1.hashfrom:call,但当我尝试在base64中进行转换时,它给出了一个错误,即string not allowed。如何转换base64? 谢谢你的关注

我尝试使用该代码将c[all]转换为sha1:

let str = "c[all]"
let den3 = str.sha1()
其工作良好,返回正确,即:0fee061faab109e27b75010f2f1a0d8258bab7c5

当我加上let den3=str.sha1.toBase64,我得到mgzlzta2mwzhywixmdllmjdinzuwmtbmmyxytbkodi1oghyjdjnq==这是错误的,实际上我需要得到:D+4GH6qxCeJ7dQEPLxoNgli6t8U=

我的问题在哪里

这是我的分机

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()
    }
}

你可以像这样使用加密工具包

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()
    }
}

这回答了你的问题吗?不,这与我的问题不同,让我更清楚。我更新了我的问题,我已经更新了,但它不符合我的愿望。没有看到更新,但上面的代码也返回mgzlzta2mwzhyxmdllmjdinzuwmtbmmyxytbkodi1oghyjdjnq==我认为应该返回的值。你能解释一下为什么你认为它应该返回D+4GH6qxCeJ7dQEPLxoNgli6t8U=?您确定生成您要查找的字符串的输入字符串是c[all]而不是其他字符串吗?或者您要查找的字符串可能是由SHA1以外的散列生成的?SHA1,如果安全性问题,您应该使用SHA256或更高版本。