Swift 等同于 Python 的 - hash.digest().encode('base64').strip()?

Swift Equivant to Python's - hash.digest().encode('base64').strip()?

基本上我正在尝试将我的 Python 代码转换为 Swift,但似乎无法为这行代码找到 equivalent/alternative(md5 哈希摘要到 base64 ):

return hash.digest().encode('base64').strip()

来源:

它returns一个24个字符的字符串,这正是我使用所需要的。我尝试将它用于 base64,但创建了一个很长的字符串(我猜是因为它是 base64 编码的 hexdigest 而不是 digest?):

func toBase64(url: String) -> String{
    let data = url.dataUsingEncoding(NSUTF8StringEncoding)
    return data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
}

这是我的 md5 设置(带有 CommonCrypto/CommonCrypto.h 的桥接头):

func md5(string string: String) -> String {
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0)
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
        CC_MD5(data.bytes, CC_LONG(data.length), &digest)
    }

    var digestHex = ""
    for index in 0..<Int(CC_MD5_DIGEST_LENGTH) {
        digestHex += String(format: "%02x", digest[index])
    }

    return digestHex
}

非常感谢任何帮助!

正如您自己所说,您的 md5(string:) 相当于 hexdigest,而不是 digest。 md5摘要的结果是一个字节序列,最好在Swift.

中的NSData中保存

定义这个:

func md5Data(string string: String) -> NSData {
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0)
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
        CC_MD5(data.bytes, CC_LONG(data.length), &digest)
    }

    let digestData = NSData(bytes: digest, length: Int(CC_MD5_DIGEST_LENGTH))

    return digestData
}

你可以这样写:

let result = md5Data(string: "test").base64EncodedStringWithOptions([])
print(result) //->"CY9rzUYh03PK3k6DJie09g=="