俊星的BLOG

          JAVA單向加密(MD5,SHA,MAC)

          具體代碼如下:
          import java.security.MessageDigest;

          import javax.crypto.KeyGenerator;
          import javax.crypto.Mac;
          import javax.crypto.SecretKey;
          import javax.crypto.spec.SecretKeySpec;

          import sun.misc.BASE64Decoder;
          import sun.misc.BASE64Encoder;

          /**
           * 加密(主要有:MD4,SHA,MAC)
           * 
           * 
          @author kinkding
           * @history 2009-6-3
           
          */

          public class MyEncrypt {
              
          /** MD5 加密 */
              
          public static byte[] encryptMD5(byte[] data) throws Exception {
                  MessageDigest md5 
          = MessageDigest.getInstance("MD5");
                  md5.update(data);
                  
          return md5.digest();
              }


              
          /** SHA 加密 */
              
          public static byte[] encryptSHA(byte[] data) throws Exception {
                  MessageDigest sha 
          = MessageDigest.getInstance("SHA");
                  sha.update(data);
                  
          return sha.digest();
              }


              
          /** 取得HMAC密鑰 */
              
          public static String getMacKey() throws Exception {
                  KeyGenerator keyGenerator 
          = KeyGenerator.getInstance("HmacMD5");
                  SecretKey secretKey 
          = keyGenerator.generateKey();
                  
          return new BASE64Encoder().encode(secretKey.getEncoded());
              }


              
          /** 執行加密 */
              
          public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
                  
          byte[] bkey = new BASE64Decoder().decodeBuffer(key);
                  SecretKey secretKey 
          = new SecretKeySpec(bkey, "HmacMD5");
                  Mac mac 
          = Mac.getInstance(secretKey.getAlgorithm());
                  mac.init(secretKey);
                  
          return mac.doFinal(data);
              }


              
          private static String toHex(byte[] buffer) {
                  StringBuffer sb 
          = new StringBuffer(buffer.length * 3);
                  
          for (int i = 0; i < buffer.length; i++{
                      sb.append(Character.forDigit((buffer[i] 
          & 0xf0>> 416));
                      sb.append(Character.forDigit(buffer[i] 
          & 0x0f16));
                  }

                  
          return sb.toString();
              }


              
          public static void main(String[] args) {
                  String msg 
          = "生活真好^_^";
                  
          byte[] data = msg.getBytes();
                  
          try {
                      System.out.println(
          "msg:" + msg);
                      System.out.println(
          "md5:" + toHex(encryptMD5(data)));
                      System.out.println(
          "sha:" + toHex(encryptSHA(data)));
                      String key 
          = getMacKey();
                      System.out.println(
          "mac key:" + key);
                      System.out.println(
          "mac:" + toHex(encryptHMAC(data, key)));
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }


              }

          }


          運行效果如下:
          msg:生活真好^_^
          md5:e0649dfaef57789734e920c7ecb9c4ea
          sha:a4bd855836de26b2323778b797629fed4416f12f
          mac key:zBPe28oho2H84+Mg8mF4abpd0MQvdjgqgFdX4hmUQQbOGnX1aFq/oQnogsHVIczgx1AZ1s2/ncPz
          tBQIGLZUnw
          ==
          mac:87f4140161ad43797059e85dd9962897

          posted on 2009-06-03 23:20 俊星 閱讀(1269) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 逊克县| 温州市| 武宣县| 扎赉特旗| 西畴县| 康定县| 天气| 兴宁市| 渝北区| 巨鹿县| 赣州市| 桂林市| 汉阴县| 喀什市| 大兴区| 张家口市| 新巴尔虎左旗| 阜新市| 乌兰察布市| 新余市| 阿拉善盟| 明星| 长治县| 石渠县| 荔波县| 忻州市| 高陵县| 惠东县| 大安市| 竹溪县| 介休市| 孟津县| 咸阳市| 鄂尔多斯市| 井陉县| 常州市| 泰安市| 泗水县| 马鞍山市| 兴文县| 雅江县|