Swift相当于Python';s-hash.digest().encode(';base64';).strip()?

Swift相当于Python';s-hash.digest().encode(';base64';).strip()?,python,ios,swift,base64,md5,Python,Ios,Swift,Base64,Md5,基本上,我正在尝试将Python代码转换为Swift,但似乎找不到这行代码的等效/替代代码(md5哈希摘要转换为base64): 资料来源: 它返回一个24个字符的字符串,这正是我的使用所需要的。我尝试将其用于base64,但创建了一个非常长的字符串(我猜是因为base64编码的是hexdigest而不是digest?): 这是我的md5设置(带有CommonCrypto/CommonCrypto.h的桥接头): func md5(string:string)->string{ var dige

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

资料来源:

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

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

func md5(string:string)->string{
var digest=[UInt8](计数:Int(CC\u MD5\u digest\u长度),repeatedValue:0)
如果let data=string.dataUsingEncoding(NSUTF8StringEncoding){
CC_MD5(data.bytes、CC_LONG(data.length)和摘要)
}
var digestHex=“”

对于0中的索引,正如您自己所说,您的
md5(字符串:)
等同于
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=="

你猜对了…@martin-r你知道我怎样才能得到摘要而不是hexdigest吗?(如果你想说的是这个的话)我试过几次,但都没有成功
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
}
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=="