iOS MD5加密和SHA-1加密

Objective-c实现MD5和SHA1算法相对还是比较简单的,可以直接调用系统的C/C++共享库来实现调用

MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一

SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。

iOS MD5加密

废话不多说,直接献上代码

MD5加密:

    #import <CommonCrypto/CommonDigest.h>  
      - (NSString *)md5Encrypt {  
          const char *original_str = [self UTF8String];  
          unsigned char result[CC_MD5_DIGEST_LENGTH];  
          CC_MD5(original_str, strlen(original_str), result);  
          NSMutableString *hash = [NSMutableString string];  
          for (int i = 0; i < 16; i++)  
          [hash appendFormat:@"X", result[i]];  
          return [hash lowercaseString];  
}  
    @end  
MD5只能称为一种不可逆的加密算法,只能用作一些检验过程,不能恢复其原文。

iOS sha1加密方法(哈希算法,用于校验数据完整性)以及字符串中含有汉字的情况的加密方法

代码块

代码块语法遵循标准markdown代码,例如:

第一种方法没有汉字的情况下可以用
第二种方法可以实现这个含有汉字的 第二种方法的加密方式适用于纯字符串以及带有中文的字符串
   首先需要添加头文件
#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;
}


首先需要添加头文件
#import<CommonCrypto/CommonDigest.h>
然后直接使用下面的方法就可以了
//sha1加密方式
- (NSString *) sha1:(NSString *)input
{
     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;

用上面的方法中文字符串转data时会造成数据丢失,
把
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];  
    NSData *data = [NSData dataWithBytes:cstr length:input.length]; 

这两句改成

    NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
就可以了
拓展NSString,实现完整功能,全部代码
#import <CommonCrypto/CommonDigest.h>  
@interface NSString (encrypto)  
- (NSString *) md5;  
- (NSString *) sha1;  
- (NSString *) sha1_base64;  
- (NSString *) md5_base64;  
- (NSString *) base64;  

@end  
@implementation NSString (encrypto)  
- (NSString*) sha1  
{  
    const charchar *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 charchar *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 charchar *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 charchar *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  

网上链接:主题:如何对中文字符串进行sha1加密

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值