Objective-C 与JAVA的SHA1/HmacSHA1加密算法实现

最近研究IOS手机上登录的功能。由于加密方式使用SHA1算法。网上也没找到直接的例子,最终参照StackoverFlow上的大神,完成了加密实现。

先上代码:

 

 

[objc]  view plain  copy
 
  1. //HmacSHA1加密;  
  2. +(NSString *)HmacSha1:(NSString *)key data:(NSString *)data  
  3. {  
  4.     const charchar *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];  
  5.     const charchar *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];  
  6.     //Sha256:  
  7.     // unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];  
  8.     //CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);  
  9.       
  10.     //sha1  
  11.     unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];  
  12.     CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);  
  13.   
  14.     NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC  
  15.                                           length:sizeof(cHMAC)];  
  16.       
  17.     NSString *hash = [HMAC base64EncodedStringWithOptions:0];//将加密结果进行一次BASE64编码。  
  18.     return hash;  
  19. }  
  20.   
  21. //密码加密方式:SHA1  
  22. +(NSString *)EncriptPassword_SHA1:(NSString *)password{  
  23.     const charchar *cstr = [password cStringUsingEncoding:NSUTF8StringEncoding];  
  24.     NSData *data = [NSData dataWithBytes:cstr length:password.length];  
  25.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  26.     CC_SHA1(data.bytes, data.length, digest);  
  27.       
  28.     NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];  
  29.       
  30.     for(int i =0; i < CC_SHA1_DIGEST_LENGTH; i++) {  
  31.         [result appendFormat:@"%02x", digest[i]];  
  32.     }  
  33.       
  34.     return [result uppercaseString];  
  35. }  

 

由于Android版本也用到,附上JAVA版本代码:

1.HmacSHA1:

 

[java]  view plain  copy
 
  1. SecretKeySpec localSecretKeySpec = new SecretKeySpec(mySecretKey.getBytes("UTF-8"), "HmacSHA1");//加密密钥  
  2. Mac localMac = Mac.getInstance("HmacSHA1");  
  3. localMac.init(localSecretKeySpec);  
  4. localMac.update(myDate.getBytes("UTF-8"));//加密内容,这里使用时间  
  5. String result = Base64.encodeToString(localMac.doFinal(), 0).trim(); //获取加密结果并转BASE64  

2:直接SHA1

 

 

[java]  view plain  copy
 
    1. public static String authPassword(String paramString)  
    2. {  
    3. try  
    4.   {  
    5.     MessageDigest localMessageDigest = MessageDigest.getInstance("SHA1");  
    6.     localMessageDigest.update(paramString.getBytes());  
    7.     String str = bytes2Hex(localMessageDigest.digest()).toUpperCase();  
    8. return str;  
    9.   }  
    10. catch (NoSuchAlgorithmException localNoSuchAlgorithmException)  
    11.   {  
    12.   }  
    13. return "";  }  

 

 1 public static String bytes2Hex(byte[] src) {
 2 
 3   StringBuilder stringBuilder = new StringBuilder("");
 4   if (src == null || src.length <= 0) {
 5    return null;
 6   }
 7   for (int i = 0; i < src.length; i++) {
 8    int v = src[i] & 0xFF;
 9    String hv = Integer.toHexString(v);
10    if (hv.length() < 2) {
11     stringBuilder.append(0);
12    }
13    stringBuilder.append(hv);
14   }
15   return stringBuilder.toString();
16  }

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值