需求:
对字符串(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];
参考博客:
原文地址:https://blog.csdn.net/qq_42440990/article/details/127981887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32356.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!