最近項目中,和第三方公司有個接口調用,第三方公司給的接口地址要驗籤,其中用到了HmacSHA1加密算法
記錄一下,以備不時之需數組
public class HMAC { /** * 定義加密方式 * MAC算法可選如下多種算法 * <pre> * HmacMD5 * HmacSHA1 * HmacSHA256 * HmacSHA384 * HmacSHA512 * </pre> */ private static final String KEY_MAC = "HmacMD5"; private static final String KEY_MAC_SHA1 = "HmacSHA1"; private static final String CHARSET_UTF8 = "UTF-8"; /* 使用 HmacSha1 加密 */ public static String hmacSha1Encrypt(String encryptText, String encryptKey) throws Exception { byte[] text = encryptText.getBytes(CHARSET_UTF8); byte[] keyData = encryptKey.getBytes(CHARSET_UTF8); SecretKeySpec secretKey = new SecretKeySpec(keyData, KEY_MAC_SHA1); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return byte2hex(mac.doFinal(text)); } //二行制轉字符串 public static String byte2hex(byte[] b) { StringBuilder hs = new StringBuilder(); String stmp; for (int n = 0; b!=null && n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1) hs.append('0'); hs.append(stmp); } return hs.toString().toUpperCase(); } }
能夠加一個參數,針對不一樣的加密方式,只須要改變傳入的參數值便可。app
下面是從網上找到一個byte[]數組轉換String的方法工具
try{ String by = HMAC.hmacSha1Encrypt("caoke","advancement"); System.out.println("by ============"+by);//88951F2AA794A7153675230F008EBD0D5720FFC2 }catch (Exception e){ e.printStackTrace(); }
能夠和網上在線加密工具進行對比 http://encode.chahuo.com/ 來驗證是否加密正確。ui