首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在iOS中计算SHA-2 (理想情况下是SHA256或SHA512)散列?

如何在iOS中计算SHA-2 (理想情况下是SHA256或SHA512)散列?
EN

Stack Overflow用户
提问于 2011-06-03 22:02:53
回答 6查看 33.5K关注 0票数 58

安全服务API似乎不允许我直接计算散列。有大量的公共领域和自由许可版本可用,但如果可能的话,我更喜欢使用系统库实现。

数据可以通过NSData或普通指针访问。

散列的加密强度对我来说很重要。SHA-256是可接受的最小散列大小。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-03 22:28:58

这是我在SHA1中使用的:

代码语言:javascript
复制
#import <CommonCrypto/CommonDigest.h>

+ (NSData *)sha1:(NSData *)data {
    unsigned char hash[CC_SHA1_DIGEST_LENGTH];
    if ( CC_SHA1([data bytes], [data length], hash) ) {
        NSData *sha1 = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];        
        return sha1;
    }
return nil;
}

CC_SHA1替换为CC_SHA256 (或您需要的任何内容),并将CC_SHA1_DIGEST_LENGTH替换为CC_SHA256_DIGEST_LENGTH

票数 81
EN

Stack Overflow用户

发布于 2012-11-03 00:15:31

这里有一个非常类似的基于NSString的应用程序

代码语言:javascript
复制
+ (NSString *)hashed_string:(NSString *)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];

    // This is an iOS5-specific method.
    // It takes in the data, how much data, and then output format, which in this case is an int array.
    CC_SHA256(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

    // Parse through the CC_SHA256 results (stored inside of digest[]).
    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }

    return output;
}

(学分归http://www.raywenderlich.com/6475/basic-security-in-ios-5-tutorial-part-1所有)

票数 35
EN

Stack Overflow用户

发布于 2016-03-19 06:06:20

这就是对我有效的方法

代码语言:javascript
复制
func sha256(securityString : String) -> String {
    let data = securityString.dataUsingEncoding(NSUTF8StringEncoding)!
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
    for byte in hash {
        output.appendFormat("%02x", byte)
    }
    return output as String
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6228092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档