Karp 的技术博客

Hash HMAC 签名在 PHP、Python、Node.js 和 Java 中的使用

简介

Hash HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证码算法,用于验证消息的完整性和真实性。在本篇博客中,我们将介绍如何在 PHP、Python、Node.js 和 Java 中生成和验证 Hash HMAC 签名。

什么是 Hash HMAC 签名?

HMAC 是一种基于哈希函数和密钥的消息认证码算法。它通过将消息与密钥进行哈希运算来生成一个固定长度的哈希值,用于验证消息的完整性和真实性。HMAC 使用一个密钥来对消息进行加密,并将加密后的结果与消息一起进行哈希运算。

在 PHP 中生成和验证 HMAC 签名

在 PHP 中,可以使用 hash_hmac 函数生成和验证 HMAC 签名。下面是一个生成和验证 HMAC 签名的 PHP 示例代码:

<?php

$data = 'Hello, World!';
$key = 'YourSecretKey';

// 生成 HMAC 签名
$signature = hash_hmac('sha256', $data, $key);

// 验证 HMAC 签名
$isValid = hash_equals($signature, hash_hmac('sha256', $data, $key));

if ($isValid) {
    echo 'HMAC signature is valid.';
} else {
    echo 'HMAC signature is invalid.';
}
PHP

在 Python 中生成和验证 HMAC 签名

在 Python 中,可以使用 hmac 模块生成和验证 HMAC 签名。下面是一个生成和验证 HMAC 签名的 Python 示例代码:

import hmac
import hashlib

data = b'Hello, World!'
key = b'YourSecretKey'

# 生成 HMAC 签名
signature = hmac.new(key, data, hashlib.sha256).hexdigest()

# 验证 HMAC 签名
isValid = hmac.compare_digest(signature, hmac.new(key, data, hashlib.sha256).hexdigest())

if isValid:
    print('HMAC signature is valid.')
else:
    print('HMAC signature is invalid.')
Python

在 Node.js 中生成和验证 HMAC 签名

在 Node.js 中,可以使用 crypto 模块生成和验证 HMAC 签名。下面是一个生成和验证 HMAC 签名的 Node.js 示例代码:

const crypto = require('crypto');

const data = 'Hello, World!';
const key = 'YourSecretKey';

// 生成 HMAC 签名
const signature = crypto.createHmac('sha256', key).update(data).digest('hex');

// 验证 HMAC 签名
const isValid = crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(crypto.createHmac('sha256', key).update(data).digest('hex'), 'hex')
);

if (isValid) {
    console.log('HMAC signature is valid.');
} else {
    console.log('HMAC signature is invalid.');
}
JavaScript

在 Java 中生成和验证 HMAC 签名

在 Java 中,可以使用 javax.crypto.Mac 类和 java.security.Key 接口生成和验证 HMAC 签名。下面是一个生成和验证 HMAC 签名的 Java 示例代码:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Arrays;

public class HmacExample {
    public static void main(String[] args) throws Exception {
        String data = "Hello, World!";
        String key = "YourSecretKey";

        // 生成 HMAC 签名
        Mac mac = Mac.getInstance("HmacSHA256");
        Key secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA256");
        mac.init(secretKey);
        byte[] signature = mac.doFinal(data.getBytes());

        // 验证 HMAC 签名
        Mac macVerify = Mac.getInstance("HmacSHA256");
        macVerify.init(secretKey);
        byte[] signatureVerify = macVerify.doFinal(data.getBytes());

        boolean isValid = Arrays.equals(signature, signatureVerify);

        if (isValid) {
            System.out.println("HMAC signature is valid.");
        } else {
            System.out.println("HMAC signature is invalid.");
        }
    }
}
Java

结论

Hash HMAC 签名是一种强大的消息认证码算法,用于验证消息的完整性和真实性。在本篇博客中,我们介绍了如何在 PHP、Python、Node.js 和 Java 中生成和验证 HMAC 签名的示例代码。根据您的需求和使用的编程语言,您可以选择适合您的方法来实现 HMAC 签名。

参考文献

请根据需要修改代码示例和参考文献,并确保引用了适当的来源。

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月18日 06:58
2

目录

来自 《 Hash HMAC 签名在 PHP、Python、Node.js 和 Java 中的使用》