本文介绍: 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编码

原文地址:https://blog.csdn.net/qq_42440990/article/details/127981887

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_32356.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注