我想把像"abc“这样的字符串转换成MD5散列。我想在iOS和Swift中做到这一点。我试过使用下面的解决方案,但它们对我不起作用:
Importing CommonCrypto in a Swift framework
How to use CC_MD5 method in swift language.
http://iosdeveloperzone.com/2014/10/03/using-commoncrypto-in-swift/
更清楚地说,我希望在Swift中实现类似于以下PHP代码的输出:
$str = "Hello";
echo md5($str);
输出: 8b1a9953c4611296a827abf8c47804d7
发布于 2017-09-21 00:40:03
我发布了一个不依赖于CommonCrypto或其他任何东西的pure Swift implementation。它在麻省理工学院的许可下可用。
代码由一个single swift file组成,您只需将其放入项目中即可。如果您愿意,也可以将包含的Xcode项目与框架和单元测试目标一起使用。
它使用起来很简单:
let input = "The quick brown fox jumps over the lazy dog"
let digest = input.utf8.md5
print("md5: \(digest)")
印刷品:md5: 9e107d9d372bb6826bd81d3542a419d6
swift文件包含文档和更多示例。
发布于 2017-08-25 02:35:20
这是一个基于zaph answer的扩展
extension String{
var MD5:String {
get{
let messageData = self.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.map { String(format: "%02hhx", $0) }.joined()
}
}
}
完全兼容swift 3.0。你仍然需要在你的桥头文件中使用#import <CommonCrypto/CommonCrypto.h>
发布于 2019-04-02 15:07:08
在swift编程中,最好是做一个字符串函数,所以使用起来会很容易。在这里,我使用上面给出的解决方案之一做了一个字符串扩展。谢谢@wajih
import Foundation
import CommonCrypto
extension String {
func md5() -> String {
let context = UnsafeMutablePointer<CC_MD5_CTX>.allocate(capacity: 1)
var digest = Array<UInt8>(repeating:0, count:Int(CC_MD5_DIGEST_LENGTH))
CC_MD5_Init(context)
CC_MD5_Update(context, self, CC_LONG(self.lengthOfBytes(using: String.Encoding.utf8)))
CC_MD5_Final(&digest, context)
context.deallocate()
var hexString = ""
for byte in digest {
hexString += String(format:"%02x", byte)
}
return hexString
}
}
用法
let md5String = "abc".md5()
https://stackoverflow.com/questions/32163848
复制相似问题