import com.niwodai.csc.service.HmacMD5Sign; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Map; import java.util.TreeMap; /** * @ClassName: HmacMD5SignImpl * @Description:HmacMD5Sign签名 * @Author guoh * @Date 2018/8/10 17:27 */ @Service public class HmacMD5SignImpl implements HmacMD5Sign { private Logger logger = LoggerFactory.getLogger(HmacMD5SignImpl.class); /** * MAC算法可选以下多种算法 * */ public static final String KEY_MAC = "HmacMD5"; @Override public String getHmacMD5Signature(Map<String, String> requestParam, String key) { String data = formPublicParam(requestParam); byte[] inputData = data.getBytes(); SecretKey secretKey = new SecretKeySpec(key.getBytes(), KEY_MAC); Mac mac; try { mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return byteArrayToHexString(mac.doFinal(inputData)); } catch (Exception e) { logger.error("HmacMD5算法加密失败",e); } return null; } /*byte数组转换为HexString*/ private String byteArrayToHexString(byte[] b) { StringBuffer sb = new StringBuffer(b.length * 2); for (int i = 0; i < b.length; i++) { int v = b[i] & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString(); } /**map参数排序**/ private String formPublicParam(Map<String, String> requestParam) { //所有的参数,这里使用TreeMap, 好处在于天然有序,默认是字母顺序 Map<String, String> params = new TreeMap<>(); params.putAll(requestParam); //访问的URL StringBuffer buffer = new StringBuffer(); for (Map.Entry<String, String> param : params.entrySet()) { buffer.append(param.getKey() + "=" + param.getValue()); } return buffer.toString(); } }
Java HmacMD5算法签名
最新推荐文章于 2024-10-16 11:40:37 发布