博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C 与JAVA的SHA1/HmacSHA1加密算法实现
阅读量:6954 次
发布时间:2019-06-27

本文共 2408 字,大约阅读时间需要 8 分钟。

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

先上代码:

 

 

[objc]   
 
  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]   
 
  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]   
 
    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  }

 

 

转载地址:http://tfuil.baihongyu.com/

你可能感兴趣的文章
MapReduce实现WordCount
查看>>
JavaScript 常用功能总结
查看>>
3.3. 静态化
查看>>
今天我来炫炫富(r11笔记第45天)
查看>>
C# 地磅串口编程
查看>>
【云和恩墨】Oracle初学者入门指南-什么是 Metalink 或 MOS ?
查看>>
栈桥-断桥
查看>>
JS编程建议——72:惰性载入函数
查看>>
[20160325]bbed是否有4G的限制.txt
查看>>
医疗保健行业未来发展的5大趋势预测
查看>>
cdn 导致跨域问题
查看>>
安防监控项目动辄几十亿,什么样的监控系统才能胜任?
查看>>
[20170203]克隆schema.txt
查看>>
JavaScript技巧&写法
查看>>
spring security oauth2
查看>>
将u盘的文件复制到虚拟机上的linux系统上面—》文件挂载(转)
查看>>
sendEmail invalid SSL_version at SSL.pm
查看>>
Call&nbsp;to&nbsp;undefined&nbsp;function&nbsp;mssql_connect()错误解决
查看>>
HDFS Archival Storage
查看>>
NodeJs——子进程
查看>>