2026/3/10 20:24:22
网站建设
项目流程
什么 电子商务网站建设与管,百度小程序还需要做网站吗,个人网站制作设计,网络搭建与应用教程按指定格式拼接原始字符串、UTF-8编码、HMAC-SHA256加密、转十六进制字符串#xff0c;#xff08;兼容Java 8#xff0c;Android/后端通用#xff09;#xff0c;并做好异常处理和注释#xff0c;直接复制就能用。
核心说明
Java中实现HMAC-SHA256需要用到javax.crypto包…按指定格式拼接原始字符串、UTF-8编码、HMAC-SHA256加密、转十六进制字符串兼容Java 8Android/后端通用并做好异常处理和注释直接复制就能用。核心说明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_ALGORITHMHmacSHA256;// 十六进制字符集固定privatestaticfinalchar[]HEX_CHARS0123456789abcdef.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/secretStringrawStrString.format(dev%stimestamp%dnonce%ssecret%s,dev,timestamp,nonce,secretKey);// 2. 将字符串和秘钥编码为UTF-8字节数组byte[]rawBytesrawStr.getBytes(StandardCharsets.UTF_8);byte[]secretBytessecretKey.getBytes(StandardCharsets.UTF_8);// 3. 初始化HMAC-SHA256加密器SecretKeySpecsecretKeySpecnewSecretKeySpec(secretBytes,HMAC_SHA256_ALGORITHM);MacmacMac.getInstance(HMAC_SHA256_ALGORITHM);mac.init(secretKeySpec);// 4. 计算HMAC-SHA256并转十六进制字符串byte[]signBytesmac.doFinal(rawBytes);returnbytesToHex(signBytes);}/** * 字节数组转十六进制字符串小写 * param bytes 加密后的字节数组 * return 十六进制小写字符串 */privatestaticStringbytesToHex(byte[]bytes){char[]resultnewchar[bytes.length*2];for(inti0;ibytes.length;i){intvalbytes[i]0xFF;// 消除符号位影响result[i*2]HEX_CHARS[val4];// 高4位result[i*21]HEX_CHARS[val0x0F];// 低4位}returnnewString(result);}// 测试示例可直接运行验证publicstaticvoidmain(String[]args){try{// 测试参数StringdevDEVICE123456;longtimestamp1735689600;Stringnonceabcdefg1234567;StringsecretKeymyDeviceSecret123;// 计算签名StringsignaturecalculateDeviceSignature(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开发无需额外依赖直接复制即可Android SDK 194.4完全支持StandardCharsets.UTF_8低版本19可替换为UTF-8字符串// 低版本Android替换编码方式byte[]rawBytesrawStr.getBytes(UTF-8);byte[]secretBytessecretKey.getBytes(UTF-8);无需添加额外权限加密相关API属于Android核心库无需在清单文件声明。总结核心实现通过javax.crypto.Mac实现HMAC-SHA256手动实现字节数组转十六进制关键兼容UTF-8编码、小写十六进制输出、timestamp用long类型保证跨语言签名一致直接使用代码包含工具类、测试示例、异常处理Android/Java后端通用复制即可集成到项目中。