加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何隐藏字符串到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()
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读