当前位置:首页 > PHP

java 实现php hashhmac

2026-02-16 02:43:47PHP

在 Java 中实现 PHP 的 hash_hmac

要在 Java 中实现 PHP 的 hash_hmac 功能,可以使用 Java 的加密库来生成 HMAC(Hash-based Message Authentication Code)。以下是一个完整的实现方法。

导入必要的库

确保项目中包含 Java 的标准加密库:

java 实现php hashhmac

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

实现 HMAC 生成

以下是一个通用的方法,用于生成 HMAC,支持多种哈希算法(如 SHA-256、SHA-1、MD5 等):

public static String hashHmac(String algorithm, String data, String key) {
    try {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), algorithm);
        Mac mac = Mac.getInstance(algorithm);
        mac.init(secretKey);
        byte[] rawHmac = mac.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(rawHmac);
    } catch (NoSuchAlgorithmException | InvalidKeyException e) {
        throw new RuntimeException("Failed to generate HMAC", e);
    }
}

调用示例

如果需要生成 SHA-256 的 HMAC:

java 实现php hashhmac

String data = "message";
String key = "secret";
String hmacSha256 = hashHmac("HmacSHA256", data, key);
System.out.println("HMAC-SHA256: " + hmacSha256);

如果需要生成十六进制格式的 HMAC(类似于 PHP 的 hash_hmac 默认输出):

public static String hashHmacHex(String algorithm, String data, String key) {
    try {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), algorithm);
        Mac mac = Mac.getInstance(algorithm);
        mac.init(secretKey);
        byte[] rawHmac = mac.doFinal(data.getBytes());
        StringBuilder hexString = new StringBuilder();
        for (byte b : rawHmac) {
            hexString.append(String.format("%02x", b));
        }
        return hexString.toString();
    } catch (NoSuchAlgorithmException | InvalidKeyException e) {
        throw new RuntimeException("Failed to generate HMAC", e);
    }
}

支持的算法列表

Java 支持的 HMAC 算法包括:

  • HmacSHA256
  • HmacSHA1
  • HmacSHA512
  • HmacMD5

根据需求选择合适的算法即可。

标签: javaphp
分享给朋友:

相关文章

java如何运行

java如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…