微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何隐藏字符串到sha1与Swift?

在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()
    }
}

原文地址:https://www.jb51.cc/swift/320782.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐