首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
移动开发
> 详细
iOS开发之Objective-c的MD5/SHA1加密算法的实现
时间:
2016-04-11 14:22:26
阅读:
416
评论:
0
收藏:
0
[点我收藏+]
标签:
[objc]
view plain
copy
Objective-c实现MD
5和SHA
1算法相对还是比较简单的,可以直接调用系统的C/C++共享库来实现调用
MD
5即Message Digest Algorithm
5(信息-摘要算法
5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一
SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。
使用方式如下:
MD
5加密方式
-(NSString *) md
5
{
const
char
char *cStr = [
self
UTF8String];
unsigned
char digest[CC_MD
5_DIGEST_LENGTH];
CC_MD
5( cStr, strlen(cStr), digest );
NSMutableString *output = [NSMutableString
stringWithCapacity:
CC_MD5_DIGEST_LENGTH *
2];
for(
int i =
0; i < CC_MD
5_DIGEST_LENGTH; i++)
[output
appendFormat:
@"%02x", digest[i]];
return output;
}
SHA
1加密方式
- (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, 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;
}
当然也可以结合BASE
6
4来使用,这里的BASE
6
4编码使用 GTMBase
6
4实现,需要导入
- (
NSString *) sha
1_base
6
4
{
const
char
char *cstr = [
self
cStringUsingEncoding:NSUTF
8StringEncoding];
NSData *data = [NSData
dataWithBytes:cstr
length:
self
.length];
uint
8_t digest[CC_SHA
1_DIGEST_LENGTH];
CC_SHA
1(data
.bytes, data
.length, digest);
NSData * base
6
4 = [[NSData
alloc]initWithBytes:digest
length:CC_SHA
1_DIGEST_LENGTH];
base
6
4 = [GTMBase
6
4
encodeData:base
6
4];
NSString * output = [[NSString
alloc]
initWithData:base
6
4
encoding:NSUTF
8StringEncoding];
return output;
}
- (
NSString *) md
5_base
6
4
{
const
char
char *cStr = [
self
UTF8String];
unsigned
char digest[CC_MD
5_DIGEST_LENGTH];
CC_MD
5( cStr, strlen(cStr), digest );
NSData * base
6
4 = [[NSData
alloc]initWithBytes:digest
length:CC_MD
5_DIGEST_LENGTH];
base
6
4 = [GTMBase
6
4
encodeData:base
6
4];
NSString * output = [[NSString
alloc]
initWithData:base
6
4
encoding:NSUTF
8StringEncoding];
return output;
}
通过拓展NSString,实现完整功能,全部代码
@interface NSString (encrypto)
- (
NSString *) md
5;
- (
NSString *) sha
1;
- (
NSString *) sha
1_base
6
4;
- (
NSString *) md
5_base
6
4;
- (
NSString *) base
6
4;
@end
@implementation NSString (encrypto)
- (NSString*) sha
1
{
const
char
char *cstr = [
self
cStringUsingEncoding:NSUTF
8StringEncoding];
NSData *data = [NSData
dataWithBytes:cstr
length:
self
.length];
uint
8_t digest[CC_SHA
1_DIGEST_LENGTH];
CC_SHA
1(data
.bytes, data
.length, digest);
NSMutableString* output = [NSMutableString
stringWithCapacity:
CC_SHA1_DIGEST_LENGTH *
2];
for(
int i =
0; i < CC_SHA
1_DIGEST_LENGTH; i++)
[output
appendFormat:
@"%02x", digest[i]];
return output;
}
-(
NSString *) md
5
{
const
char
char *cStr = [
self
UTF8String];
unsigned
char digest[CC_MD
5_DIGEST_LENGTH];
CC_MD
5( cStr, strlen(cStr), digest );
NSMutableString *output = [NSMutableString
stringWithCapacity:
CC_MD5_DIGEST_LENGTH *
2];
for(
int i =
0; i < CC_MD
5_DIGEST_LENGTH; i++)
[output
appendFormat:
@"%02x", digest[i]];
return output;
}
- (
NSString *) sha
1_base
6
4
{
const
char
char *cstr = [
self
cStringUsingEncoding:NSUTF
8StringEncoding];
NSData *data = [NSData
dataWithBytes:cstr
length:
self
.length];
uint
8_t digest[CC_SHA
1_DIGEST_LENGTH];
CC_SHA
1(data
.bytes, data
.length, digest);
NSData * base
6
4 = [[NSData
alloc]initWithBytes:digest
length:CC_SHA
1_DIGEST_LENGTH];
base
6
4 = [GTMBase
6
4
encodeData:base
6
4];
NSString * output = [[NSString
alloc]
initWithData:base
6
4
encoding:NSUTF
8StringEncoding];
return output;
}
- (
NSString *) md
5_base
6
4
{
const
char
char *cStr = [
self
UTF8String];
unsigned
char digest[CC_MD
5_DIGEST_LENGTH];
CC_MD
5( cStr, strlen(cStr), digest );
NSData * base
6
4 = [[NSData
alloc]initWithBytes:digest
length:CC_MD
5_DIGEST_LENGTH];
base
6
4 = [GTMBase
6
4
encodeData:base
6
4];
NSString * output = [[NSString
alloc]
initWithData:base
6
4
encoding:NSUTF
8StringEncoding];
return output;
}
- (
NSString *) base
6
4
{
NSData * data = [
self
dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:
YES];
data = [GTMBase
6
4
encodeData:data];
NSString * output = [[NSString
alloc]
initWithData:data
encoding:NSUTF
8StringEncoding];
return output;
}
@end
实现时候不要忘记导入CC相关的库的头文件
CommonCrypto/CommonDigest
.h
iOS开发之Objective-c的MD5/SHA1加密算法的实现
标签:
原文地址:http://www.cnblogs.com/NSong/p/5377992.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
关闭苹果IOS app自动更新
2021-07-29
开发一个即时通讯App
2021-07-28
iOS 跳转App Store进行评分
2021-07-26
诺基亚短信生成!太好玩了
2021-07-26
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
2021-07-26
Android系统编程入门系列之界面Activity响应丝滑的传统动画
2021-07-26
uniapp h5,app两端复制文本
2021-07-22
uni-app滚动视图容器(scroll-view)之监听上拉事件
2021-07-21
新型横向移动工具原理分析、代码分析、优缺点以及检测方案
2021-07-19
Android系统编程入门系列之界面Activity交互响应
2021-07-19
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!