iOS sha1加密算法
来源:互联网 发布:网上哪里买淘宝钻号 编辑:程序博客网 时间:2024/06/05 21:54
from http://www.cnblogs.com/On1Key/p/5458782.html
最近在项目中使用到了网络请求签名认证的方法,于是在网上找关于OC sha1加密的方法,很快找到了一个大众使用的封装好的方法,以下代码便是
首先需要添加头文件
#import<CommonCrypto/CommonDigest.h>
然后直接使用下面的方法就可以了
//sha1加密方式
- (NSString *) sha1:(NSString *)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.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;
}
我直接在项目中使用了这个方法,而且完美解决问题,但是,今天重点说的是这个但是,在后期的项目修改中,需要加密的字符串里面增加了汉字(之前需要加密的字符串中无汉字),在这种情况下,上面的方法就和服务器那边的加密不一样了(艰难的调试排除问题的过程不赘述);
最终发现的原因就是我这边生成的加密字符串和服务器那边生成的不一样,自然就会发生错误;错误的原因就是因为加密的字符串中包含有汉字
然后是在网上查找,在<主题:如何对中文字符串进行sha1加密>这个帖子中找到了方法,现贡献给大家
首先需要添加头文件
#import<CommonCrypto/CommonDigest.h>
然后直接使用下面的方法就可以了
//sha1加密方式
- (NSString *) sha1:(NSString *)input
{
//const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
//NSData *data = [NSData dataWithBytes:cstr length:input.length];
NSData *data = [input 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;
}
可以看出这个方法与第一个方法的区别,头两句注释掉了,用
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
代替了那两句的作用;
帖子一楼bindbasic的原话是这样的
用上面的方法中文字符串转data时会造成数据丢失,
把
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
这两句改成
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
就可以了
经实测,第二种方法的加密方式适用于纯字符串以及带有中文的字符串,推荐使用,推荐使用,推荐使用!!!(重要的事情说三遍)
备注:严格来说,sha1(安全[哈希算法])只是叫做一种算法,用于检验数据完整性,并不能叫做加密~
相关链接:
iOS sha1加密方法(哈希算法,用于校验数据完整性)以及字符串中含有汉字的情况的加密方法
MD5与SHA-1加密简介(附iOS加密方式)
iOS中hmac_sha1如何解密
iOS开发之Objective-c的MD5/SHA1加密算法的实现
- OC IOS SHA1加密算法
- iOS sha1加密算法
- iOS开发MD5/SHA1加密算法
- iOS MD5加密算法 和 SHA1加密
- iOS的MD5/SHA1加密算法的实现
- iOS的MD5/SHA1加密算法的实现
- SHA1 加密算法
- sha1加密算法
- SHA1加密算法
- sha1加密算法
- iOS基于Objective-c的MD5/SHA1加密算法的实现
- iOS Objective-c的MD5/SHA1加密算法的实现
- iOS 利用MD5或SHA1加密算法给字符串加密
- SHA1与MD5 加密算法
- sha1 加密算法-java
- 密码学:SHA1加密算法详解
- MD5 SHA1 BASE64加密算法
- Java中SHA1加密算法
- 设计模式之迭代器模式
- Android UI系列-----Dialog对话框
- eclipse中springboot报错
- 欢迎使用CSDN-markdown编辑器
- ASP.NET 下的微信支付开发配置实践(官方demo)
- iOS sha1加密算法
- shell 小脚本
- Selenium2(Webdriver)+Python处理浏览器弹窗
- 蓝桥杯 BASIC-14 基础练习 时间转换
- docker版本升级
- caffe实战-2
- Android Fragment 之获取FragmentManager
- 使用Docker编译Android系统源码
- maven整合springmvc-Spring-ActiveMQ