Python与Java实现hmacSha256+base64


实现HMAC-SHA256并编码为Base64

简介

  1. HMAC是什么?
    HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种使用密码散列函数,同时结合一个加密密钥,通过特定计算方式生成的消息认证码(MAC)。它可以用来保证数据的完整性,同时可以用作某个消息的身份验证。HMAC算法要求通信双方共享密钥、约定算法,并对报文进行哈希运算,形成固定长度的认证码,从而通过认证码的校验来确定报文的合法性。

  2. SHA-256是什么?
    SHA-256(Secure Hash Algorithm 256,安全散列算法256)是散列函数(或哈希函数)的一种,能对一个任意长度(按bit计算)的数字消息(message),计算出一个32个字节长度的字符串(又称消息摘要,message digest)。SHA-256由美国国家安全局研发,是SHA-2下细分出的一种算法,对于任意长度的消息,SHA-256都会产生一个256-bit(32-byte数组)的哈希值,称作消息摘要。这个摘要通常用一个长度为64位的十六进制字符串来表示,用于验证数据的完整性。

Java实现HMAC-SHA256

实现思路

在Java中,实现HMAC-SHA256并编码为Base64,通常涉及到使用javax.crypto包中的类。

步骤

  1. 导入必要的类:你需要导入javax.crypto.Mac,javax.crypto.spec.SecretKeySpec,以及java.util.Base64。

  2. 初始化Mac实例:使用Mac.getInstance(“HmacSHA256”)来获取HMAC-SHA256的Mac实例。

  3. 初始化密钥:创建一个密钥(Key)实例,通常是一个字节数组。

  4. 初始化Mac对象:使用密钥初始化Mac对象。

  5. 执行MAC计算:对要签名的数据进行更新(update),然后调用doFinal()方法完成计算。

  6. 编码为Base64:将计算结果编码为Base64字符串。

代码

import android.util.Log;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class EncryptUtils {

    public static String HmacSHA256(String message, String secret) throws Exception {
        // 获取HMAC-SHA256的Mac实例
        Mac mac = Mac.getInstance("HmacSHA256");

        // 初始化密钥,这里使用一个示例密钥(在实际应用中,密钥应该保密)
        byte[] secretKeyBytes = secret.getBytes(); // 确保密钥长度为256位(32字节)
        SecretKeySpec secretKey = new SecretKeySpec(secretKeyBytes, "HmacSHA256");

        //初始化Mac对象
        mac.init(secretKey);

        // 要签名的数据
        byte[] dataBytes = message.getBytes();

        // 执行MAC计算
        byte[] resultBytes = mac.doFinal(dataBytes);

        // 编码为Base64字符串
        String encodedResult = Base64.getEncoder().encodeToString(resultBytes);

        Log.d("", "HMAC-SHA256 Base64: " + encodedResult);
        return encodedResult;
    }
}

调用

    public void testSha() {
        try {
            String message = "Hello";
            String secret = "key";
            String hmac = EncryptUtils.HmacSHA256(message, secret);
            // 输出xwufTWZb1il0r8g1gt6BDnKkGljbgsU4qdc0ySZtMh4=
            Log.d("", "HmacSHA256: " + hmac);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Python实现HMAC-SHA256

实现思路

在Python中,在实现HMAC-SHA256加密并对其进行Base64编码时,你可以使用hashlib库来计算HMAC-SHA256,然后使用base64库来进行Base64编码。

步骤

  1. 安装必要的库
    首先,确保你的Python环境中已经安装了hashlib和base64库。这两个库通常是Python标准库的一部分,因此通常不需要单独安装。

  2. 创建HMAC对象:使用hmac.new()函数创建一个新的HMAC对象。你需要提供密钥(key)、消息(message),以及一个散列函数(在这个例子中是hashlib.sha256)。

  3. 获取HMAC的二进制数据:通过调用digest()方法,获取HMAC的二进制数据。

  4. Base64编码:使用base64.b64encode()方法将HMAC的二进制数据编码为Base64字符串。最后,如果你需要将结果作为字符串处理,可以使用.decode()方法将字节串转换为普通字符串。

注意事项

确保密钥(key)和消息(message)在传入函数前已经是以字符串形式提供的。在函数内部,我们使用.encode()方法将它们转换为字节串,因为Python的hmac和hashlib库都要求输入为字节串。

在实际应用中,密钥应该保密并安全地存储。不要硬编码密钥在代码中,特别是在生产环境中。
如果需要与外部系统交互,确保双方使用相同的密钥和算法设置,以避免安全漏洞。

代码

import hashlib
import hmac
import base64

def hmac_sha256_base64(message, key):
    # 创建一个新的hmac对象,使用SHA256作为hash函数
    hmac_obj = hmac.new(key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)

    # 获取HMAC的二进制数据
    hmac_digest = hmac_obj.digest()

    # 将HMAC的二进制数据转换为Base64编码的字符串
    hmac_base64 = base64.b64encode(hmac_digest)

    # 返回Base64编码的字符串
    return hmac_base64.decode()  # 将字节串解码为字符串

rt = hmac_sha256_base64('Hello', 'key')
print(rt)
# 输出xwufTWZb1il0r8g1gt6BDnKkGljbgsU4qdc0ySZtMh4=

作者:帅得不敢出门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅得不敢出门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值