当前位置: 首页 > news >正文

Android 中实现 HMAC-SHA256

按指定格式拼接原始字符串、UTF-8编码、HMAC-SHA256加密、转十六进制字符串,(兼容Java 8+,Android/后端通用),并做好异常处理和注释,直接复制就能用。

核心说明

Java中实现HMAC-SHA256需要用到javax.crypto包下的Mac类,十六进制转换需要手动实现(Java无原生直接转的方法),同时要处理字符编码加密异常,以下是完整实现。

完整Java代码(直接可用)

包含签名计算核心方法+十六进制转换工具方法+异常处理+测试示例

importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importjava.nio.charset.StandardCharsets;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;/** * 设备登录签名计算工具 * 实现的HMAC-SHA256签名逻辑,格式:dev={dev}&timestamp={timestamp}&nonce={nonce}&secret={secretKey} */publicclassDeviceSignUtil{// 加密算法:HMAC-SHA256privatestaticfinalStringHMAC_SHA256_ALGORITHM="HmacSHA256";// 十六进制字符集(固定)privatestaticfinalchar[]HEX_CHARS="0123456789abcdef".toCharArray();/** * 计算设备登录HMAC-SHA256签名 * @param dev 设备号 * @param timestamp 时间戳(整型) * @param nonce 随机串 * @param secretKey 秘钥 * @return 十六进制签名字符串(小写) * @throws NoSuchAlgorithmException 算法不存在异常(理论上不会出现) * @throws InvalidKeyException 秘钥无效异常 */publicstaticStringcalculateDeviceSignature(Stringdev,longtimestamp,Stringnonce,StringsecretKey)throwsNoSuchAlgorithmException,InvalidKeyException{// 1. 严格按格式拼接原始字符串(注意参数名拼写:nonce/secret)StringrawStr=String.format("dev=%s&timestamp=%d&nonce=%s&secret=%s",dev,timestamp,nonce,secretKey);// 2. 将字符串和秘钥编码为UTF-8字节数组byte[]rawBytes=rawStr.getBytes(StandardCharsets.UTF_8);byte[]secretBytes=secretKey.getBytes(StandardCharsets.UTF_8);// 3. 初始化HMAC-SHA256加密器SecretKeySpecsecretKeySpec=newSecretKeySpec(secretBytes,HMAC_SHA256_ALGORITHM);Macmac=Mac.getInstance(HMAC_SHA256_ALGORITHM);mac.init(secretKeySpec);// 4. 计算HMAC-SHA256并转十六进制字符串byte[]signBytes=mac.doFinal(rawBytes);returnbytesToHex(signBytes);}/** * 字节数组转十六进制字符串(小写) * @param bytes 加密后的字节数组 * @return 十六进制小写字符串 */privatestaticStringbytesToHex(byte[]bytes){char[]result=newchar[bytes.length*2];for(inti=0;i<bytes.length;i++){intval=bytes[i]&0xFF;// 消除符号位影响result[i*2]=HEX_CHARS[val>>>4];// 高4位result[i*2+1]=HEX_CHARS[val&0x0F];// 低4位}returnnewString(result);}// 测试示例(可直接运行验证)publicstaticvoidmain(String[]args){try{// 测试参数Stringdev="DEVICE123456";longtimestamp=1735689600;Stringnonce="abcdefg1234567";StringsecretKey="myDeviceSecret123";// 计算签名Stringsignature=calculateDeviceSignature(dev,timestamp,nonce,secretKey);System.out.println("设备签名结果:"+signature);}catch(Exceptione){e.printStackTrace();}}}

异常处理说明

Java加密相关方法会抛出受检异常,需手动捕获/声明,主要异常:

  • NoSuchAlgorithmException:指定的HmacSHA256算法不存在(理论上不会出现,Java所有版本都支持);
  • InvalidKeyException:秘钥无效(如空秘钥),业务中需做秘钥非空校验;
  • 实际业务中建议在外层捕获异常,统一处理(如返回空签名、打印日志):
    // 业务中调用示例(捕获所有异常)publicStringgetSign(Stringdev,longtimestamp,Stringnonce,StringsecretKey){try{returnDeviceSignUtil.calculateDeviceSignature(dev,timestamp,nonce,secretKey);}catch(Exceptione){e.printStackTrace();returnnull;// 或返回空字符串,根据业务处理}}

Android端兼容说明

如果这段代码用于Android开发,无需额外依赖,直接复制即可:

  1. Android SDK 19+(4.4)完全支持StandardCharsets.UTF_8,低版本(<19)可替换为"UTF-8"字符串:
    // 低版本Android替换编码方式byte[]rawBytes=rawStr.getBytes("UTF-8");byte[]secretBytes=secretKey.getBytes("UTF-8");
  2. 无需添加额外权限,加密相关API属于Android核心库,无需在清单文件声明。

总结

  1. 核心实现:通过javax.crypto.Mac实现HMAC-SHA256,手动实现字节数组转十六进制;
  2. 关键兼容:UTF-8编码、小写十六进制输出、timestamp用long类型,保证跨语言签名一致;
  3. 直接使用:代码包含工具类、测试示例、异常处理,Android/Java后端通用,复制即可集成到项目中。
http://www.jsqmd.com/news/325319/

相关文章:

  • 2026年佛山市卷闸门成型设备制造商排名,靠谱且性价比高的厂家推荐
  • 深入解析:CTFHub-RCE漏洞wp
  • 单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
  • 【AI集成】深度解析分布式多语言会议/实时翻译/智能纪要生成架构
  • 从工程实践看金融级分布式清算系统的高可用与幂等设计
  • 2026佛山地区断桥铝门窗10大品牌排名,安柏瑞门窗靠谱之选
  • 销售老鸟最怕:一身武艺,在机器人报表前无处施展。
  • 分析研究院转让服务,哪家性价比高,费用怎么算?
  • 输入用户对产品的反馈评论,自动提取关键词,分析用户对创新功能的满意度。
  • 执行案件AI管理服务系统:用技术打通公平正义“最后一公里”
  • 海南广告公司哪家强?2026年海南广告公司推荐与评价,解决技术落后与生态适配核心痛点
  • 2026年海南广告公司推荐:基于文旅与跨境行业深度评价,附海口三亚等地服务排名
  • 选购优质LED灯具,需关注这些关键技术指标
  • 2026年海南广告公司推荐:多场景实战评测,破解获客成本高昂与转化率低下痛点
  • 如何选择靠谱的郑州广告公司?2026年推荐与评测,解决服务与效率核心痛点
  • 写给想做自媒体的你避开这7个坑,少走2年弯路
  • 实用指南:Java爬虫性能优化:以喜马拉雅音频元数据抓取为例
  • 2026年郑州广告公司推荐:本地企业增长痛点评测,涵盖多场景营销与效果排名
  • 技术驱动转型:IACheck的AI审核如何成为生产检测行业提质增效的新引擎
  • 不同场景该选哪家?2026年郑州广告公司推荐与评价,应对预算与效果匹配痛点
  • 分析好用的变压器服务商厂家,雄县鸿德电气设备价格情况怎样?
  • 专科生必看!9个高效降aigc工具推荐,避坑指南!
  • 海港
  • 救命神器9个AI论文工具,专科生毕业论文救星!
  • 2026年热门GEO加工厂年度排名,合作案例多的厂家有哪些?
  • wep_allowed = false
  • 基于Spring Boot的艺术培训机构信息管理系统设计与实现(任务书)
  • ETASOLUTIONS钰泰 ETA3425S2F SOT23-5 DC-DC电源芯片
  • 变压器定制厂家怎么选择,雄县鸿德电气设备优势在哪
  • 2026年冷库货架厂家推荐,中恒智能专业生产值得选吗