首页 文章 精选 留言 我的

精选列表

搜索[AES加密算法],共1650篇文章
优秀的个人博客,低调大师

iOS:Objective-c的MD5/SHA1加密算法的实现

介绍: Objective-c实现MD5和SHA1算法相对还是比较简单的,可以直接调用系统的C/C++共享库来实现调用MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。 链接:http://m.111cn.net/art-53370.htm 使用方式如下: MD5加密方式 -(NSString *) md5 { const char *cStr = [self UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr), digest ); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [output appendFormat:@"%02x", digest[i]]; return output; } SHA1加密方式 - (NSString*) sha1 { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.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; } 当然也可以结合BASE64来使用,这里的BASE64编码使用 GTMBase64实现,需要导入 //结合base64的sha1加密 - (NSString *) sha1_base64 { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes, data.length, digest); NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; base64 = [GTMBase64 encodeData:base64]; NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding]; return output; } //结合base64的md5加密 - (NSString *) md5_base64 { const char *cStr = [self UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr), digest ); NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH]; base64 = [GTMBase64 encodeData:base64]; NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding]; return output; } 例子一:通过类扩展NSString,实现完整功能,全部代码 @interface NSString (encrypto) - (NSString *) md5; - (NSString *) sha1; - (NSString *) sha1_base64; - (NSString *) md5_base64; - (NSString *) base64; @end @implementation NSString (encrypto) - (NSString*) sha1 { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.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; } -(NSString *) md5 { const char *cStr = [self UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr), digest ); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [output appendFormat:@"%02x", digest[i]]; return output; } - (NSString *) sha1_base64 { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes, data.length, digest); NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; base64 = [GTMBase64 encodeData:base64]; NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding]; return output; } - (NSString *) md5_base64 { const char *cStr = [self UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr), digest ); NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH]; base64 = [GTMBase64 encodeData:base64]; NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding]; return output; } - (NSString *) base64 { NSData * data = [self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; data = [GTMBase64 encodeData:data]; NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return output; } @end 注意: 1.实现时候不要忘记导入CC相关的库的头文件CommonCrypto/CommonDigest.h 2.在实现时还需要依赖这三个文件:GTMBase64.h GTMBase64.m GTMDefines.h 这三个文件的链接: 第一个:http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/?r=87 第二个:gtmbase64.zip 例子二:通过类扩展NSString,实现完整功能,全部代码 .h文件 #import <Foundation/Foundation.h> @interface NSString (Hash) @property (readonly) NSString *md5String; @property (readonly) NSString *sha1String; @property (readonly) NSString *sha256String; @property (readonly) NSString *sha512String; - (NSString *)hmacSHA1StringWithKey:(NSString *)key; - (NSString *)hmacSHA256StringWithKey:(NSString *)key; - (NSString *)hmacSHA512StringWithKey:(NSString *)key; @end .m文件 // // NSString+Hash.m // // Created by Tom Corwine on 5/30/12. // #import "NSString+hash.h" #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonHMAC.h> @implementation NSString (Hash) - (NSString *)md5String { const char *string = self.UTF8String; int length = (int)strlen(string); unsigned char bytes[CC_MD5_DIGEST_LENGTH]; CC_MD5(string, length, bytes); return [self stringFromBytes:bytes length:CC_MD5_DIGEST_LENGTH]; } - (NSString *)sha1String { const char *string = self.UTF8String; int length = (int)strlen(string); unsigned char bytes[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(string, length, bytes); return [self stringFromBytes:bytes length:CC_SHA1_DIGEST_LENGTH]; } - (NSString *)sha256String { const char *string = self.UTF8String; int length = (int)strlen(string); unsigned char bytes[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(string, length, bytes); return [self stringFromBytes:bytes length:CC_SHA256_DIGEST_LENGTH]; } - (NSString *)sha512String { const char *string = self.UTF8String; int length = (int)strlen(string); unsigned char bytes[CC_SHA512_DIGEST_LENGTH]; CC_SHA512(string, length, bytes); return [self stringFromBytes:bytes length:CC_SHA512_DIGEST_LENGTH]; } - (NSString *)hmacSHA1StringWithKey:(NSString *)key { NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; NSData *messageData = [self dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *mutableData = [NSMutableData dataWithLength:CC_SHA1_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA1, keyData.bytes, keyData.length, messageData.bytes, messageData.length, mutableData.mutableBytes); return [self stringFromBytes:(unsigned char *)mutableData.bytes length:mutableData.length]; } - (NSString *)hmacSHA256StringWithKey:(NSString *)key { NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; NSData *messageData = [self dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *mutableData = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, keyData.bytes, keyData.length, messageData.bytes, messageData.length, mutableData.mutableBytes); return [self stringFromBytes:(unsigned char *)mutableData.bytes length:mutableData.length]; } - (NSString *)hmacSHA512StringWithKey:(NSString *)key { NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; NSData *messageData = [self dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *mutableData = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA512, keyData.bytes, keyData.length, messageData.bytes, messageData.length, mutableData.mutableBytes); return [self stringFromBytes:(unsigned char *)mutableData.bytes length:mutableData.length]; } #pragma mark - Helpers - (NSString *)stringFromBytes:(unsigned char *)bytes length:(int)length { NSMutableString *mutableString = @"".mutableCopy; for (int i = 0; i < length; i++) [mutableString appendFormat:@"%02x", bytes[i]]; return [NSString stringWithString:mutableString]; } @end 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5156638.html ,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册