首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Swift在iOS中将字符串转换为MD5哈希?

如何使用Swift在iOS中将字符串转换为MD5哈希?
EN

Stack Overflow用户
提问于 2015-08-23 14:28:37
回答 8查看 101.8K关注 0票数 123

我想把像"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代码的输出:

代码语言:javascript
复制
$str = "Hello";

echo md5($str);

输出: 8b1a9953c4611296a827abf8c47804d7

EN

回答 8

Stack Overflow用户

发布于 2017-09-21 00:40:03

我发布了一个不依赖于CommonCrypto或其他任何东西的pure Swift implementation。它在麻省理工学院的许可下可用。

代码由一个single swift file组成,您只需将其放入项目中即可。如果您愿意,也可以将包含的Xcode项目与框架和单元测试目标一起使用。

它使用起来很简单:

代码语言:javascript
复制
let input = "The quick brown fox jumps over the lazy dog"
let digest = input.utf8.md5
print("md5: \(digest)")

印刷品:md5: 9e107d9d372bb6826bd81d3542a419d6

swift文件包含文档和更多示例。

票数 19
EN

Stack Overflow用户

发布于 2017-08-25 02:35:20

这是一个基于zaph answer的扩展

代码语言:javascript
复制
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>

票数 6
EN

Stack Overflow用户

发布于 2019-04-02 15:07:08

在swift编程中,最好是做一个字符串函数,所以使用起来会很容易。在这里,我使用上面给出的解决方案之一做了一个字符串扩展。谢谢@wajih

代码语言:javascript
复制
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
}
}

用法

代码语言:javascript
复制
let md5String = "abc".md5()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32163848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档