基本上我正在尝试将我的Python代码转换为Swift,并且似乎找不到这行代码的等效/替代(md5 Hash Digest to base64):
return hash.digest().encode('base64').strip()
来源:https://stackoverflow.com/a/32041572/3697446
它返回一个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
}
任何帮助都很丰富!
答案 0 :(得分:2)
正如您所言,您的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=="