美文网首页Object-CiOSiOS过坑技巧
iOS开发-对含有汉字的字符串进行SHA1加密,结果错误的解决方

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

作者: 恰克斯 | 来源:发表于2016-03-23 10:14 被阅读404次

问题描述

在开发过程中为了安全,在和服务器进行数据交互时,通常会进行数据加密,而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;
}

相关文章

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

    问题描述 在开发过程中为了安全,在和服务器进行数据交互时,通常会进行数据加密,而SHA1就是一种常见的加密方式。在...

  • iOS SHA1 和 Base64 url_safe 加密

    iOS SHA1 和 Base64 url_safe 加密 网上查找的资料SHA1加密后大部分获取的是字符串,如果...

  • 2018-03-22

    sha1加密(中文加密之后的错误问题)

  • IOS 中的MD5使用

    这里简单的介绍一下,在iOS开发中,对字符串进行MD5加密的做法。 - (NSString *)stringToM...

  • 加解密

    开发中经常会有字符串加解密的需求,如用户密码加密,可以直接MD5/SHA1加密,MD5/SHA1是不可逆的,验证时...

  • iOS几种加密方式

    iOS 几种加密方法2017-06-19 [iOS开发] iOS常见的几种加密方法 普通加密方法是讲密码进行加密后...

  • Unicode-objects must be encoded

    问题描述:在提交表单的时候发生如上错误。原因是在使用sha1加密的时候没有注意编码。 解决方案: # 密码加密 ...

  • 收集iOS-- NSString 字符串的使用

    判断字符串是否含有中文 计算字符串长度方法一 方法二 iOS 获取汉字的拼音 1. 不可变字符串 NSStir...

  • iOS端post请求参数中含有"+"号,传到

    在近期的项目开发中遇到一个问题,在数据进行加密后,有些字符串加密后会含有“+”号,在服务器端接收到为空格; 在网上...

  • utility实现字符串加密

    utility有两个很重要的方法,一个是sha1,一个是md5,通常使用他们对字符串进行加密处理 一、md5的加密...

网友评论

  • 漫步的小蚂蚁:问一个问题,大多数搜到的都是对字符串的加密 ,如果是一个图片或者其他文件呢,我做的是 按路径来,根据路径获取NSData,然后进行加密,但是获取到的SHA1值和后台对图片进行SHA1 得到的值不一样 ,求解,
    漫步的小蚂蚁:@恰克斯 没事了,解决了,多谢回复
    恰克斯:根据路径获取NSData时什么意思?

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

本文链接:https://www.haomeiwen.com/subject/wucllttx.html