如何隐藏字符串到sha1与Swift?
发布时间:2020-12-14 05:59:20 所属栏目:百科 来源:网络整理
导读:在objective-c它看起来像这样: #include sys/xattr.h@implementation NSString (reverse)-(NSString*)sha1{ NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes,(int)data.length,
在objective-c它看起来像这样:
#include <sys/xattr.h> @implementation NSString (reverse) -(NSString*)sha1 { NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes,(int)data.length,digest); NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) [output appendFormat:@"%02x",digest[i]]; return output; } @end 我需要像这样的Swift,是可能吗? 请,显示工作示例。
您的Objective-C代码(使用NSString类别)可以直接转换为Swift
(使用String扩展)。 首先你必须创建一个“桥接头”并添加 #import <CommonCrypto/CommonCrypto.h> 然后: extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),repeatedValue: 0) CC_SHA1(data.bytes,CC_LONG(data.length),&digest) let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) for byte in digest { output.appendFormat("%02x",byte) } return output as String } } println("Hello World".sha1()) 这可以写得稍短,Swifter as extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),&digest) let hexBytes = map(digest) { String(format: "%02hhx",$0) } return "".join(hexBytes) } } Swift 2的更新: extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),&digest) let hexBytes = digest.map { String(format: "%02hhx",$0) } return hexBytes.joinWithSeparator("") } } Swift 3的更新: extension String { func sha1() -> String { let data = self.data(using: String.Encoding.utf8)! var digest = [UInt8](repeating: 0,count:Int(CC_SHA1_DIGEST_LENGTH)) data.withUnsafeBytes { _ = CC_SHA1($0,CC_LONG(data.count),&digest) } let hexBytes = digest.map { String(format: "%02hhx",$0) } return hexBytes.joined() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |