千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > HMAC-SHA256加密算法

HMAC-SHA256加密算法

来源:千锋教育
发布人:xqq
时间: 2023-11-24 04:47:41 1700772461

一、什么是HMAC-SHA256

HMAC-SHA256(Hash Message Authentication Code-Secure Hash Algorithm 256 bit)是一种加密算法,是SHA-256散列函数与一个密钥结合的身份验证方法。HMAC的安全性基于散列函数(SHA-256),而且可以通过密钥的添加来增加信任度。此算法经常用于网络领域中,例如 HTTPS、SSL、SSH 等加密通讯领域。

二、HMAC-SHA256算法的工作原理

在进行HMAC-SHA256算法运算时,需要传递两个参数key和data,其中key是一个密钥,data是需要进行散列的数据。算法流程如下:

通过密钥key经过一个特定的方法,将key转换成一个value。

通过异或运算符(XOR)以填充value。如果key太长,即大于block_size位,需要通过SHA-256散列函数将key压缩到block_size位。

将填充后的value和data传递给SHA-256哈希函数,得到一个256位的哈希值。

将哈希值作为结果返回。

这样,我们就得到了一个充分利用密钥安全性的、结果得到哈希码长度为256位的信息鉴别码。由于密钥的妥善保管和其他安全措施的增加以20毫秒为单位的运算时间会远远超过人类寿命的可承受范围。

三、HMAC-SHA256的使用场景

HMAC-SHA256算法在以下场景中得到了广泛的应用:

网络安全,例如在HTTPS、SSL和SSH这些安全连接中,使用HMAC-SHA256算法对网络传输数据进行加密。

数字签名,用来对数据进行身份鉴别,保证数据传输的完整性,确保数据未被篡改。

密码学,HMAC-SHA256算法可作为证明算法,用来证明某个实体拥有特定的密钥。

API安全验证,在API接口请求中,使用HMAC-SHA256算法保证数据在请求和响应传输过程中的完整性和安全性。

四、HMAC-SHA256的代码示例

PHP的HMAC-SHA256加密


function hmac_sha256($key, $data){
  return hash_hmac('sha256', $data, $key, true);
}

$key = 'This_is_a_secret_key';
$data = 'This_is_a_message';
echo bin2hex(hmac_sha256($key, $data));  // 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

Java的HMAC-SHA256加密


public static String hmacSha256(String key, String data) {
  try {
      Mac hmac_SHA256 = Mac.getInstance("HmacSHA256");
      SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
      hmac_SHA256.init(secret_key);
      byte[] hash = hmac_SHA256.doFinal(data.getBytes(StandardCharsets.UTF_8));
      return bytesToHex(hash);
  } catch (NoSuchAlgorithmException | InvalidKeyException e) {
      throw new RuntimeException("Exception while encrypting data with HMAC-SHA256", e);
  }
}

public static String bytesToHex(byte[] bytes){
  StringBuilder builder = new StringBuilder();
  for (byte b : bytes) {
      builder.append(String.format("%02x", b & 0xff));
  }
  return builder.toString();
}

String key = "This_is_a_secret_key";
String data = "This_is_a_message";
System.out.println(hmacSha256(key, data));  // 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

Python的HMAC-SHA256加密


import hmac
import hashlib

def hmac_sha256(key, data):
  hmac_sha256 = hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha256).digest()
  return hmac_sha256.hex()

key = 'This_is_a_secret_key'
data = 'This_is_a_message'
print(hmac_sha256(key, data))  # 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT