MD5-hmac密钥验证算法的简要介绍

hmac是一种秘密的密钥验证算法。

hmac提供的数据完整性和源身份验证完全取决于密钥分配的范围。如果只有发起者和接受者知道hmac密钥,那么这就对两者发送的数据提供了源身份验证和完整性保证。

 

下面给大家提供该算法的加密类DigestUtil的简单用法:

代码如下:

StringBuffer sValue = new StringBuffer();

sValue.append("the content you want to encrypt");

sValue.append("08129010");

String hmacMD5 = DigestUtil.hmacSign(sValue.toString(),"123456");

其中第一个参数为加密的原文,第二个参数为密钥。

  1. public class DigestUtil { 
  2.     /**
  3.      * 加密源数据
  4.      * @see 这是针对多条字符串(即数组)进行加密的方法。它会把数组元素拼成新字符串,然后再加密
  5.      * @see 本文暂未用到该方法
  6.      * @param aValue 加密的原文,即源数据
  7.      * @param aKey   密钥
  8.      */ 
  9.     public static String getHmac(String[] args, String key) { 
  10.         if (args == null || args.length ==0) { 
  11.             return (null); 
  12.         } 
  13.         StringBuffer str = new StringBuffer(); 
  14.         for (int i =0; i < args.length; i++) { 
  15.             str.append(args[i]); 
  16.         } 
  17.         return (hmacSign(str.toString(), key)); 
  18.     } 
  19.      
  20.     /**
  21.      * 加密源数据
  22.      * @see 这是针对一条字符串进行加密的方法
  23.      * @param aValue 加密的原文,即源数据
  24.      * @param aKey   密钥
  25.      */ 
  26.     public static String hmacSign(String aValue, String aKey) { 
  27.         byte k_ipad[] = new byte[64]; 
  28.         byte k_opad[] = newbyte[64]; 
  29.         byte keyb[]; 
  30.         byte value[]; 
  31.         try { 
  32.             keyb = aKey.getBytes("UTF-8"); 
  33.             value = aValue.getBytes("UTF-8"); 
  34.         } catch (UnsupportedEncodingException e) { 
  35.             keyb = aKey.getBytes(); 
  36.             value = aValue.getBytes(); 
  37.         } 
  38.  
  39.         Arrays.fill(k_ipad, keyb.length, 64, (byte54); 
  40.         Arrays.fill(k_opad, keyb.length, 64, (byte)92); 
  41.         for (int i =0; i < keyb.length; i++) { 
  42.             k_ipad[i] = (byte) (keyb[i] ^0x36); 
  43.             k_opad[i] = (byte) (keyb[i] ^0x5c); 
  44.         } 
  45.  
  46.         MessageDigest md = null
  47.         try { 
  48.             md = MessageDigest.getInstance("MD5"); 
  49.         } catch (NoSuchAlgorithmException e) { 
  50.             return null
  51.         } 
  52.         md.update(k_ipad); 
  53.         md.update(value); 
  54.         byte dg[] = md.digest(); 
  55.         md.reset(); 
  56.         md.update(k_opad); 
  57.         md.update(dg, 016); 
  58.         dg = md.digest(); 
  59.         return toHex(dg); 
  60.     } 
  61.  
  62.     public static String toHex(byte input[]) { 
  63.         if (input == null){ 
  64.             return null
  65.         } 
  66.         StringBuffer output = new StringBuffer(input.length *2); 
  67.         for(int i=0; i<input.length; i++){ 
  68.             int current = input[i] &0xff
  69.             if (current<16){ 
  70.                 output.append("0"); 
  71.             } 
  72.             output.append(Integer.toString(current, 16)); 
  73.         } 
  74.         return output.toString(); 
  75.     } 
  76.      
  77. //  /** 
  78. //   * 本文暂未用到该方法 
  79. //   */ 
  80. //  public static String digest(String aValue) { 
  81. //      aValue = aValue.trim(); 
  82. //      byte value[]; 
  83. //      try { 
  84. //          value = aValue.getBytes("UTF-8"); 
  85. //      } catch (UnsupportedEncodingException e) { 
  86. //          value = aValue.getBytes(); 
  87. //      } 
  88. //      MessageDigest md = null; 
  89. //      try { 
  90. //          md = MessageDigest.getInstance("SHA"); 
  91. //      } catch (NoSuchAlgorithmException e) { 
  92. //          e.printStackTrace(); 
  93. //          return null; 
  94. //      } 
  95. //      return toHex(md.digest(value)); 
  96. //  } 
  97. //   
  98. //  public static void main(String[] args) { 
  99. //      String value = "adpoga234lkdsngoiuayv1111wekng123123korhjtg"; 
  100. //      String[] values = {"adpoga234lkdsngoiuayv11", "11wekng123123korhjtg"}; 
  101. //      String key = "abcdjadyer"; 
  102. //      System.out.println(hmacSign(value, key)); 
  103. //      System.out.println(getHmac(values, key)); 
  104. //  } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值