IOS XCode Objectc SHA256加密

需求:

对字符串(NSString)格式数据进行SHA256加密之后再进行Base64编码。SHA256加密生成的不是标准的占位2的十六进制格式,而是需要直接输出字节数组。

方案:

创建新的SecurityUtility.h以及SecurityUtility.m文件,在需要加密的字符串所在文件调用SecurityUtility.h头文件,并调用所写方法。

实施例:

1.SecurityUtility.h文件代码:

#import <Foundation/Foundation.h>

@interface SecurityUtility : NSObject

//SHA256加密
+ (NSData*)sha256HashFor:(NSString *)input;

@end

其中, 输入NSString格式数据,输出NSData格式数据(Objectc中想要生成Base64编码,需要先转换成NSData格式,因此这里直接生成NSData格式数据)
  

2.SecurityUtility.m文件代码:

#import "SecurityUtility.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonHMAC.h>

@implementation SecurityUtility

//SHA256加密
+ (NSData*)sha256HashFor:(NSString*)input{
    NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
    NSData *data1 = [[NSData alloc] initWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    return data1;
}

@end

其中, digest为uint8_t格式,如果用unsigned char格式直接输出字符数组的话会导致输出结果每次结果不同(结果最后两位每次都会变,不清楚原因)
  

3.调用代码:

(1)首先需要在需要调用SHA256编码方法的文件中引入SecurityUtility头文件。

#import "SecurityUtility.h"

其中,SecurityUtility.h为SHA256方法头文件的名称(可换其他名称)。
  
(2)调用sha256HashFor方法

//将image_add进行SHA256加密,输出的是字节数组,并不是标准的SHA256格式(占位2的十六进制)
NSData *sha256_data =[SecurityUtility sha256HashFor:image_add];
// Base64编码
NSString *sha_result = [sha256_data base64EncodedStringWithOptions:0];

其中,image_add是本文中需要加密的NSString字符串数据,sha_results是本文中最后需要的加密数据。

注:如果需要标准的SHA256格式编码(占位为2的十六进制)可以参考下面的代码:

1.SecurityUtility.h文件代码:

#import <Foundation/Foundation.h>

@interface SecurityUtility : NSObject

//SHA256加密
+ (NSString*)sha256HashFor:(NSString *)input;

@end

其中,输入是NSString格式数据,输出也是NSString数据。注意:NSString数据之后需要转换成NSData格式数据后才能进行Base64编码
  

2.SecurityUtility.m文件代码:

#import "SecurityUtility.h"
#import <CommonCrypto/CommonDigest.h>

@implementation SecurityUtility

//SHA256加密
+ (NSString*)sha256HashFor:(NSString*)input{
    const char* str = [input UTF8String];
    unsigned char result[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(str, (CC_LONG)strlen(str), result);
    
    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
    for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
    {
    	//输出格式:占位为2的十六进制
        [ret appendFormat:@"%02x",result[i]];
    }
    //大写
    ret = (NSMutableString *)[ret uppercaseString];
    return ret;
}
@end

其中,和输出字符数组不同的是使用unsigned char格式数据作为中间变量。
  

3.调用代码:

(1)首先需要在需要调用SHA256编码方法的文件中引入SecurityUtility头文件。

#import "SecurityUtility.h"

  
(2)调用sha256HashFor方法

NSString *sha256_data =[SecurityUtility sha256HashFor:image_add];
//将字符串格式转换成NSData格式的二进制数据才能进行base64编码
NSData *sha_data = [string_sha256 dataUsingEncoding:NSUTF8StringEncoding];
NSString *sha_result = [sha256_data base64EncodedStringWithOptions:0];

参考博客:

标准格式SHA256编码
字节数组SHA256编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值