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 中封装返回的主要内容,如果未能解决你的问题,请参考以下文章
WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5Base64时间随机数)