iOS开发-对含有汉字的字符串进行SHA1加密,结果错误的解决方法

问题描述

在开发过程中为了安全,在和服务器进行数据交互时,通常会进行数据加密,而SHA1就是一种常见的加密方式。在一次开发中,前端加密后的字符串和服务器的加密字符串,对应不起来,导致网络请求失败。

问题原因

经过验证发现是没有汉字时,前后端加密字符串能对应起来,网络请求没问题。而含有含有汉字时,就出错了。

解决方法

在网络上搜索iOS SHA1加密代码时,基本上都是以下这样的代码

- (NSString *)sha1Str:(NSString *)str
{
const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:str.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsigned int)data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];
return output;
}

将前两行代码替换成

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

即,使用下面的方法进行SHA1加密

- (NSString *)sha1Str:(NSString *)str
{
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsigned int)data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];
return output;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容