banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

iOS开发之Objective-c的SHA224/SHA256/SHA384/SHA512加密算法的实现

之前在博文中实现的 SHA1 的安全性已经满足不了用户需求,今天把 SHA224/SHA256/SHA384/SHA512 的实现一并附上。 SHA 即 Secure Hash Algorithm(安全散列算法) 有多种不同位数的实现,常见的有 SHA224/SHA256/SHA384/SHA512 等

SHA224:

- (NSString*) sha224
{
const char *cstr = [self cStringUsingEncoding];
NSData *data = [NSData dataWithBytes length.length];

uint8\_t digest\[CC\_SHA224\_DIGEST\_LENGTH\];

CC\_SHA224(data.bytes, data.length, digest);

NSMutableString\* output = \[NSMutableString stringWithCapacity:CC\_SHA224\_DIGEST\_LENGTH \* 2\];

for(int i = 0; i < CC\_SHA224\_DIGEST\_LENGTH; i++)
    \[output appendFormat:@"%02x", digest\[i\]\];

return output;

}

SHA256:

- (NSString*) sha256
{
const char *cstr = [self cStringUsingEncoding];
NSData *data = [NSData dataWithBytes length.length];

uint8\_t digest\[CC\_SHA256\_DIGEST\_LENGTH\];

CC\_SHA256(data.bytes, data.length, digest);

NSMutableString\* output = \[NSMutableString stringWithCapacity:CC\_SHA256\_DIGEST\_LENGTH \* 2\];

for(int i = 0; i < CC\_SHA256\_DIGEST\_LENGTH; i++)
    \[output appendFormat:@"%02x", digest\[i\]\];

return output;

}

SHA384:

- (NSString*) sha384
{
const char *cstr = [self cStringUsingEncoding];
NSData *data = [NSData dataWithBytes length.length];

uint8\_t digest\[CC\_SHA384\_DIGEST\_LENGTH\];

CC\_SHA384(data.bytes, data.length, digest);

NSMutableString\* output = \[NSMutableString stringWithCapacity:CC\_SHA384\_DIGEST\_LENGTH \* 2\];

for(int i = 0; i < CC\_SHA384\_DIGEST\_LENGTH; i++)
    \[output appendFormat:@"%02x", digest\[i\]\];

return output;

}

SHA512:

- (NSString*) sha512
{
const char *cstr = [self cStringUsingEncoding];
NSData *data = [NSData dataWithBytes length.length];

uint8\_t digest\[CC\_SHA512\_DIGEST\_LENGTH\];

CC\_SHA512(data.bytes, data.length, digest);

NSMutableString\* output = \[NSMutableString stringWithCapacity:CC\_SHA512\_DIGEST\_LENGTH \* 2\];

for(int i = 0; i < CC\_SHA512\_DIGEST\_LENGTH; i++)
    \[output appendFormat:@"%02x", digest\[i\]\];

return output;

}

放到一起大团结

//
//NSString+SHA.h
//

#import #import #import @interface NSString(SHA)
-(NSString *) sha1;
-(NSString *) sha224;
-(NSString *) sha256;
-(NSString *) sha384;
-(NSString *) sha512;
@end

//
//NSString+SHA.m
//

#import "NSString+SHA.h"

@implementation NSString(SHA)

  • (NSString*) sha1
    {
    const char *cstr = [self cStringUsingEncoding];
    NSData *data = [NSData dataWithBytes length.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

    return output;
    }

  • (NSString*) sha224
    {
    const char *cstr = [self cStringUsingEncoding];
    NSData *data = [NSData dataWithBytes length.length];

    uint8_t digest[CC_SHA224_DIGEST_LENGTH];

    CC_SHA224(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity_SHA224_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA224_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

    return output;
    }

  • (NSString*) sha256
    {
    const char *cstr = [self cStringUsingEncoding];
    NSData *data = [NSData dataWithBytes length.length];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH];

    CC_SHA256(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity_SHA256_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

    return output;
    }

  • (NSString*) sha384
    {
    const char *cstr = [self cStringUsingEncoding];
    NSData *data = [NSData dataWithBytes length.length];

    uint8_t digest[CC_SHA384_DIGEST_LENGTH];

    CC_SHA384(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity_SHA384_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

    return output;
    }

  • (NSString*) sha512
    {
    const char *cstr = [self cStringUsingEncoding];
    NSData *data = [NSData dataWithBytes length.length];

    uint8_t digest[CC_SHA512_DIGEST_LENGTH];

    CC_SHA512(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity_SHA512_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

    return output;
    }

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.