java 用hmac-sha1进行签名

本文介绍了一种使用HmacSHA1算法进行字符串签名的Java实现方法,通过实例展示了如何生成签名,包括将密钥和请求字符串转换为字节,初始化Mac实例,更新请求并最终生成Base64编码的签名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    public static String getSignature(String s) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
// String Token = "O-xJVg7ZEXrtjWDNhzu05R7iZtyyXmv6NGt-xymKg0eOLCwwBCIgBBaDqJabzbPVCez1BvcI8q7blDGy4ZeCQQ";
String key = "O-xJVg7ZEXrtjWDNhzu05R7iZtyyXmv6NGt-xymKg0eOLCwwBCIgBBaDqJabzbPVCez1BvcI8q7blDGy4ZeCQQ";
System.out.println(key);
String request = s.toLowerCase();
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "HmacSHA1");
mac.init(keySpec);
mac.update(request.getBytes());
byte[] encryptedBytes = mac.doFinal();
return Base64.encodeBase64String(encryptedBytes);
}

转载于:https://www.cnblogs.com/xiaojiayu/p/5410604.html

<think>嗯,用户想了解HMAC-SHA1算法的实现和使用示例。首先,我需要回顾一下HMAC的基本概念,以及它如何与SHA-1结合使用。HMAC是一种基于哈希函数的消息认证码,用于验证消息的完整性和真实性。SHA-1是哈希算法,虽然现在不推荐用于安全敏感的场景,但在一些旧系统中可能还在使用。 接下来,用户可能需要具体的代码示例,所以我要考虑不同编程语言的实现,比如Python、Java、PHP等,根据提供的引用中提到的内容。例如,引用[4]提到了Java中使用Base64编码和hash_hmac的方法,而引用[3]提到了PHP的实现。但用户现在可能更希望看到Python的例子,因为前面的示例用了Python,但需要确认是否有可用的代码。 然后,使用步骤方面,应该分点说明:准备密钥、处理消息、生成HMAC-SHA1摘要、验证过程。同时,需要注意安全提示,比如密钥管理、哈希算法的选择等,因为SHA-1已经被认为不够安全,应该建议使用更安全的算法如SHA-256,但用户明确询问的是HMAC-SHA1,所以还是要给出答案,同时提醒潜在的风险。 还要考虑用户可能的疑问,比如HMAC-SHA1和SHA-1的区别,这时候需要引用引用[2]的内容,说明HMAC结合了密钥,而SHA-1是单纯的哈希。此外,实现中的常见问题,比如密钥长度、编码方式(比如Base64或十六进制输出)也需要提到。 最后,生成相关问题,可能需要覆盖替代算法、应用场景、密钥管理、验证方法等,确保用户能全面了解。</think>### HMAC-SHA1 算法详解与实现示例 #### 一、HMAC-SHA1 核心原理 HMAC-SHA1 是基于 SHA-1 哈希算法和密钥的消息认证码(MAC)算法,用于验证数据完整性和真实性。其核心公式为: $$ HMAC(K, m) = SHA1 \left( (K \oplus opad) \ || \ SHA1 \left( (K \oplus ipad) \ || \ m \right) \right) $$ 其中: - $K$ 是密钥(Key) - $m$ 是消息(Message) - $opad$ 和 $ipad$ 是固定填充值[^2] #### 二、实现步骤(以 Python 为例) ```python import hmac import hashlib import base64 def hmac_sha1(key: bytes, message: bytes) -> str: digest = hmac.new(key, message, hashlib.sha1).digest() return base64.b64encode(digest).decode() # 使用示例 key = b"secret_key" message = b"data_to_protect" signature = hmac_sha1(key, message) print("HMAC-SHA1:", signature) ``` #### 三、关键使用场景 1. API 请求签名验证(如 OAuth 1.0) 2. 网络协议数据完整性校验 3. 老旧系统间的安全通信[^1] #### 四、安全注意事项 1. **密钥管理**:密钥长度建议 ≥ 64 字节,需安全存储 2. **算法替代**:优先考虑 HMAC-SHA256(更安全)[^3] 3. **输出编码**:建议使用 Base64 或十六进制格式[^4] #### 五、验证流程 1. 发送方生成签名并附加到消息 2. 接收方用相同密钥重新计算签名 3. 对比两个签名是否一致 ```python def verify_hmac(key, message, received_sig): expected_sig = hmac_sha1(key, message) return hmac.compare_digest(expected_sig, received_sig) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值