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

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

先上代码:

//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);

    //sha1
    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
                                          length: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;
        }
      }
时间: 2024-08-13 21:55:41

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

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

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

Java培训 关于RSA加密算法有哪些应用呢?

Java培训 关于RSA加密算法有哪些应用呢? RSA加密算法是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击. Java培训关于RSA加密算法有哪些应用呢?以下举一个数据库身份验证的案例. 在使用数据集进行身份认证时,密码存在数据库中,认证时用户输入的密码与数据库中密码相同则认证通过,若数据库被破解了则对系统造成威胁,怎样保证系统安全呢?这里就可以应用RSA加密算法,对权限加密. 思路: 就是在url中传用户名密码时,先把用户名进行翻转,然后再进行加密,如输入的密码为

Java 加密 AES 对称加密算法

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

Java之 SHA1 与MD5加密

一.SHA1加密 1 /* 2 * SHA1加密,结果为小写 3 */ 4 public static String SHA1(String decript) { 5 try { 6 MessageDigest digest = java.security.MessageDigest 7 .getInstance("SHA-1"); 8 digest.update(decript.getBytes()); 9 byte messageDigest[] = digest.digest()

Java加密技术(一)—— HMACSHA1 加密算法

HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码). 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数. 输出的哈希值长度为 160 位. 在发送方和接收方共享机密密钥的前提下,HMAC 可用于确定通过不安全信道发送的消息是否已被篡改. 发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传送. 接收方重新计算所接收消息的哈希值,并检查计算所得的 HM

Java中的各种加密算法

JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码 2.对称和非对称加密算法 对称和非对称加密算法主要采用公钥和

常用加密算法的Java实现(一)——单向加密算法MD5和SHA

1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.security包(及其子包),以及sun.securityAPI包(及其子包)中.设计用于帮助开发人员在程序中同时使用低级和高级安全功能. JDK 1.1 中第一次发布的 JDK 安全中引入了“Java 加密体系结构”(JCA),指的是用于访问和开发 Java平台密码功能的构架.在 JDK 1.1 中,

Java中的MD5加密算法完整版

在进行Java软件开发过程中,难免会对一些数据进行加密,因此Java中提供了自带的MessageDigest实现对文本的加密算法,下面是一个对文本进行加密的MD5加密工具类代码示例: package net.yuerwan.commons.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.lang.StringUtil

HMACSHA1 加密算法

https://blog.csdn.net/z69183787/article/details/78393216 ********************************************************** HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码). 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数. 输出的哈希值长度为 160 位