md5 散列在 swift 中封装返回

Posted

技术标签:

【中文标题】md5 散列在 swift 中封装返回【英文标题】:md5 hash returns with encapsulation in swift 【发布时间】:2015-09-26 06:48:45 【问题描述】:

我使用了这个md5,得到了散列结果。但是,返回是这样的:<8f833933 03a151ea 33bf6e3e bbc28594>。我是 swift 新手,所以不完全确定它是否是封装。如何去掉小于号和大于号?

【问题讨论】:

这意味着 NSData 对象是使用其description 方法打印的。如果您搜索“NSData to hex string”,那么您应该会找到一些解决方案(例如:***.com/a/29642198/1187415)。 【参考方案1】:

从签名中可以看出,该函数返回一个 NSData 对象:

func md5(#string: String) -> NSData

如果要将其转换为字符串,则需要将其编码为人类可读的格式。最常见的是十六进制表示。

如果您使用该问题中较新的 Swift 2 函数,该函数返回 UInt8 数组

func md5(string string: String) -> [UInt8] 
    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)
    

    return digest

您可以使用这个方便的toHex 函数:

func toHex(bytes: [UInt8]) -> String 
    var numbers = [String]()
    for byte in bytes 
        if byte < 0x10 
            numbers.append("0")
        
        numbers.append(String(byte, radix: 16, uppercase: true))
    
    return numbers.joinWithSeparator("")

然后这会返回一个字符串:

toHex(md5("Hello"))

(在我看来,您应该始终更喜欢纯 Swift 类型(UInt8 数组)而不是 Foundation 类型(NSData)。)

【讨论】:

@user3813647 如果此答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

以上是关于md5 散列在 swift 中封装返回的主要内容,如果未能解决你的问题,请参考以下文章

PHP 之sha256 sha512封装

crypto/md5

WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5Base64时间随机数)

WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5Base64时间随机数)

请教:如何将写好的类封装成dll文件

八MD5加密并封装,并调用封装方法