俊星的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 俊星 閱讀(1266) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 阿瓦提县| 三亚市| 嘉义市| 台南市| 莱州市| 兴城市| 绥滨县| 红原县| 施秉县| 于田县| 墨江| 康马县| 营山县| 灵川县| 中牟县| 清新县| 淄博市| 南开区| 城口县| 法库县| 渝中区| 兰西县| 曲松县| 翼城县| 屏南县| 荆州市| 墨玉县| 金秀| 荣成市| 丹江口市| 伊吾县| 白银市| 顺平县| 鸡泽县| 右玉县| 和田县| 望谟县| 肥城市| 新绛县| 于田县| 荣成市|