如何使用Swift在iOS中将String转换为MD5哈希?

我想将“ abc”之类的字符串转换为MD5哈希。我想在iOS和Swift中做到这一点。我尝试使用下面的解决方案

http://iosdeveloperzone.com/2014/10/03/using-commoncrypto-in-

swift/

更清楚地说,我想在Swift中实现类似于此PHP代码输出的输出:

$str = "Hello";

echo md5($str);

输出:8b1a9953c4611296a827abf8c47804d7

回答:

分两个步骤:

1.从字符串创建md5数据

2.将md5数据隐蔽为十六进制字符串

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

}

//Test:

let digest = md5(string:"Hello")

print("digest: \(digest)")

输出:

摘要:8b1a9953c4611296a827abf8c47804d7

func MD5(string: String) -> Data {

let messageData = string.data(using:.utf8)!

var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH))

_ = digestData.withUnsafeMutableBytes {digestBytes in

messageData.withUnsafeBytes {messageBytes in

CC_MD5(messageBytes, CC_LONG(messageData.count), digestBytes)

}

}

return digestData

}

//Test:

let md5Data = MD5(string:"Hello")

let md5Hex = md5Data.map { String(format: "%02hhx", $0) }.joined()

print("md5Hex: \(md5Hex)")

let md5Base64 = md5Data.base64EncodedString()

print("md5Base64: \(md5Base64)")

输出:

md5Hex:8b1a9953c4611296a827abf8c47804d7

md5Base64:ixqZU8RhEpaoJ6v4xHgE1w ==

import Foundation

import var CommonCrypto.CC_MD5_DIGEST_LENGTH

import func CommonCrypto.CC_MD5

import typealias CommonCrypto.CC_LONG

func MD5(string: String) -> Data {

let length = Int(CC_MD5_DIGEST_LENGTH)

let messageData = string.data(using:.utf8)!

var digestData = Data(count: length)

_ = digestData.withUnsafeMutableBytes { digestBytes -> UInt8 in

messageData.withUnsafeBytes { messageBytes -> UInt8 in

if let messageBytesBaseAddress = messageBytes.baseAddress, let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress {

let messageLength = CC_LONG(messageData.count)

CC_MD5(messageBytesBaseAddress, messageLength, digestBytesBlindMemory)

}

return 0

}

}

return digestData

}

//Test:

let md5Data = MD5(string:"Hello")

let md5Hex = md5Data.map { String(format: "%02hhx", $0) }.joined()

print("md5Hex: \(md5Hex)")

let md5Base64 = md5Data.base64EncodedString()

print("md5Base64: \(md5Base64)")

输出:

md5Hex:8b1a9953c4611296a827abf8c47804d7

md5Base64:ixqZU8RhEpaoJ6v4xHgE1w ==

注意:

#import <CommonCrypto/CommonCrypto.h>必须添加到Bridging-Header文件中

有关如何创建Bridging-Header的信息

通常,不应将MD​​5用于新工作,SHA256是当前的最佳实践。

不推荐使用的文档部分中的示例:

这些函数将使用八种密码哈希算法之一来哈希String或Data输入。

name参数将哈希函数名称指定为String

支持的函数是MD2,MD4,MD5,SHA1,SHA224,SHA256,SHA384和SHA512 a此示例需要通用加密

必须在项目中具有桥接头: #import <CommonCrypto/CommonCrypto.h>

添加安全性.framework到项目。



此函数采用哈希名称和要哈希的String并返回一个Data:

name:作为字符串的哈希函数的名称  

string:要散列的字符串

返回:哈希结果为Data

func hash(name:String, string:String) -> Data? {

let data = string.data(using:.utf8)!

return hash(name:name, data:data)

}

例子:

let clearString = "clearData0123456"

let clearData = clearString.data(using:.utf8)!

print("clearString: \(clearString)")

print("clearData: \(clearData as NSData)")

let hashSHA256 = hash(name:"SHA256", string:clearString)

print("hashSHA256: \(hashSHA256! as NSData)")

let hashMD5 = hash(name:"MD5", data:clearData)

print("hashMD5: \(hashMD5! as NSData)")

输出:

clearString: clearData0123456

clearData: <636c6561 72446174 61303132 33343536>

hashSHA256: <aabc766b 6b357564 e41f4f91 2d494bcc bfa16924 b574abbd ba9e3e9d a0c8920a>

hashMD5: <4df665f7 b94aea69 695b0e7b baf9e9d6>

以上是 如何使用Swift在iOS中将String转换为MD5哈希? 的全部内容, 来源链接: utcz.com/qa/401033.html

回到顶部