墨香年少 32 发布于 3月4日 在Java中,你可以使用Java Cryptography Extension (JCE) 提供的API来实现HMAC-SHA256签名的生成和验证。下面是如何在Java中进行加密签名和验证的示例。 Java 示例 生成签名: import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class SignatureExample { public static String generateSignature(String data, String secretKey) throws Exception { // 使用HmacSHA256算法初始化Mac对象 Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256"); sha256_HMAC.init(secret_key); // 对数据进行加密 byte[] hash = sha256_HMAC.doFinal(data.getBytes()); // 将加密后的字节数组转换为字符串 String signature = Base64.getEncoder().encodeToString(hash); return signature; } public static void main(String[] args) { String secretKey = "your_secret_key"; String data = "data_to_sign"; try { String signature = generateSignature(data, secretKey); System.out.println("Signature: " + signature); } catch (Exception e) { e.printStackTrace(); } } } 验证签名: 验证签名时,你将使用相同的generateSignature方法生成签名,并将其与接收到的签名进行比较。如果两者一致,说明签名验证通过。 public class VerifySignature { // 假设receivedSignature是你从客户端接收到的签名字符串 public static boolean verifySignature(String data, String secretKey, String receivedSignature) { try { String generatedSignature = SignatureExample.generateSignature(data, secretKey); // 比较生成的签名和接收到的签名 return generatedSignature.equals(receivedSignature); } catch (Exception e) { e.printStackTrace(); return false; } } public static void main(String[] args) { String secretKey = "your_secret_key"; String data = "data_to_sign"; String receivedSignature = "the_signature_you_received"; boolean isValid = verifySignature(data, secretKey, receivedSignature); System.out.println("Is signature valid? " + isValid); } } 在这个示例中,generateSignature方法使用HmacSHA256算法对数据进行签名,并将签名结果编码为Base64字符串。verifySignature方法则用于验证接收到的签名是否与期望的签名匹配。 请确保在实际应用中,密钥secretKey保持安全,不要硬编码在代码中或者暴露给客户端。密钥应该妥善保管,只有服务器和授权的客户端知道。 目之所及,皆是回忆,心之所想,皆是过往 分享这篇帖子 链接帖子 分享到其他站点