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

先上代码:

#include <CommonCrypto/CommonDigest.h>#include <CommonCrypto/CommonHMAC.h>

  

//HmacSHA1加密;
+(NSString *)HmacSha1:(NSString *)key data:(NSString *)data
{const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];//Sha256:// unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];//CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);//sha1unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);NSData *HMAC = [[NSData alloc] initWithBytes:cHMAClength:sizeof(cHMAC)];NSString *hash = [HMAC base64EncodedStringWithOptions:0];//将加密结果进行一次BASE64编码。return hash;
}//密码加密方式:SHA1
+(NSString *)EncriptPassword_SHA1:(NSString *)password{const char *cstr = [password cStringUsingEncoding:NSUTF8StringEncoding];NSData *data = [NSData dataWithBytes:cstr length:password.length];uint8_t digest[CC_SHA1_DIGEST_LENGTH];CC_SHA1(data.bytes, data.length, digest);NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];for(int i =0; i < CC_SHA1_DIGEST_LENGTH; i++) {[result appendFormat:@"%02x", digest[i]];}return [result uppercaseString];
}

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

1.HmacSHA1:

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

2:直接SHA1

  public static String authPassword(String paramString){try{MessageDigest localMessageDigest = MessageDigest.getInstance("SHA1");localMessageDigest.update(paramString.getBytes());String str = bytes2Hex(localMessageDigest.digest()).toUpperCase();return str;}catch (NoSuchAlgorithmException localNoSuchAlgorithmException){}return "";}public static String bytes2Hex(byte[] paramArrayOfByte){String str1 = "";for (int i = 0; ; i++){if (i >= paramArrayOfByte.length)return str1;String str2 = Integer.toHexString(0xFF & paramArrayOfByte[i]);if (str2.length() == 1)str1 = str1 + "0";str1 = str1 + str2;}}

转载于:https://www.cnblogs.com/qqsscc/p/4265451.html

Objective-C 与JAVA的SHA1/HmacSHA1加密算法实现相关推荐

  1. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  2. java ecc 加密_基于java实现的ECC加密算法示例

    本文实例讲述了基于java实现的ECC加密算法.分享给大家供大家参考,具体如下: ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中, ...

  3. php hmacsha1加密,PHP版OAuth认证协议中的HMACSHA1加密算法(签名方法)

    鼓捣微博API的时候接触到OAuth认证协议,其中的HMACSHA1加密算法(签名方法)百度上找的,分享出来,也许以后有用.呵呵.... function hmacsha1($key,$data) { ...

  4. java的rsa加密算法_用java编程实现RSA加密算法

    RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换.那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法. 一.RSA加密算 ...

  5. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  6. rsa加密算法java实例,java实现的RSA加密算法详解

    本文实例讲述了java实现的RSA加密算法.分享给大家供大家参考,具体如下: 一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥 公钥:可 ...

  7. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  8. c java sha1加密解密_java HMACSHA1加密算法

    package phamos; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public class HMACSH ...

  9. java的HMACSHA1加密算法

    前期做一个和Q+相关的项目时,双方要进行一些数据的校验,对方规定的校验规则是通过hmac-sha1算法(fcg语言采用hash_hmac方法),并给出了一个例子:sig=hash_hmac(" ...

最新文章

  1. 修改mysql的时间/时区
  2. 2020年AI怎么发展?听加州大学、谷歌、英伟达、IBM怎么说
  3. 20110625 AD下DFS实现冗余文件服务器,加密软件等
  4. 面试必备,各种技术知识集大成之项目~
  5. echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
  6. 【MPI编程】任意数节点的树形求和(高性能计算)
  7. 刷新后 页面 保持滚动条位置
  8. TradingView 初识
  9. 生成颜色代码的 Java程序
  10. hana抽数到mysql,HANA数据库管理Tenant DB常用操作
  11. c语言loop until用法,流程控制中的while、until、for循环
  12. VBS去除指定的字符串中的重复项返回重复后的字符串
  13. zabbix详解(十六)——zabbix agent自动注册实战
  14. layer —— 一个简单的jQuery弹出层插件
  15. C盘清理工具Dism++教程
  16. 查看linux系统版本命令
  17. 做H5页面用什么软件比较好?
  18. Python_提取图片像素值
  19. 欧空局:SNAP and the Sentinel Toolboxes下载网址
  20. 短信验证码,在键盘显示验证码

热门文章

  1. linux verilog 编译,Verilog 编译指令简介
  2. php如何将读取到的mysql内容按发布的日期分割显示_php如何读取文件夹目录里的文件并按照日期,大小,名称排序...
  3. Docker必备国内镜像
  4. druid 连接池监控报错 Sorry, you are not permitted to view this page.
  5. 【CCCC】L2-018 多项式A除以B (25分),多项式除法
  6. itunes备份包括哪些内容_企业形象策划包括哪些内容?
  7. android定位地点的保存,Android获得所有存储设备位置的最佳方法
  8. centos7 docker安装_教你如何在 CentOS 7 下 yum 方式安装 Docker 环境
  9. 用模板类实现shared_ptr和unique_ptr
  10. Qt UDP组播的应用