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=="
基本上我正在尝试将我的 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=="