如何从NSString创建SHA1.

假设NSString设置为:

NSString *message = @"Message";

我可以使用PHP创建一个包含sha($message)的SHA1哈希.但不幸的是,在Objective-C中并不是这样.

推荐答案

我在NSString的一个类别中有这个(售价https://github.com/hypercrypt/NSString-Hashes):

#import <CommonCrypto/CommonDigest.h>

...

- (NSString *)sha1
{
    NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, (CC_LONG)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;
}

从Xcode 10.0开始,您应该使用import CommonCrypto,因为它现在在Swift中本机可用!如果您最近已迁移到Xcode 10.0并使用旧方法,这可能是您进行更改的提示:

命令CompileSwift失败,退出代码为非零

Objective-c相关问答推荐

iOS中的非延迟图像加载

是否可以 suppress Xcode 4 静态分析器警告?

从 float 或 double 实例化 NSDecimalNumber 的正确方法

在 10.9 上以编程方式启用对辅助设备的访问

我应该打电话给 [super awakeFromNib] 吗?

在 Objective-C 中实现纯虚方法

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

如何在 iPhone 上默认显示数字键盘?

Swift 3 - dynamic vs @objc

我应该在 ARC 的 init 方法中引用 self.property 吗?

为什么 NSOrderedSet 不继承自 NSSet?

将 HTTP 标头添加到 NSURLRequest

强制iphone应用程序以编程方式重新启动?

以流畅的动画显示/隐藏导航栏

关闭一次后如何返回允许推送通知对话框?

iOS 11 large-title导航栏不折叠

-[MyClassName copyWithZone:] 无法识别的 Select 器发送到实例

选中时选中的 UItableViewCell 保持蓝色

协议和代表之间的区别?

将自定义子视图(在 xib 中创建)添加到视图控制器的视图 - 我在做什么错