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