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


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


          網站導航:
           
          主站蜘蛛池模板: 峨眉山市| 西宁市| 台北县| 庆安县| 仁寿县| 桦南县| 徐州市| 日喀则市| 白城市| 武冈市| 池州市| 桐梓县| 合作市| 博客| 本溪市| 黄冈市| 宾川县| 卓尼县| 灌云县| 城口县| 湘潭县| 沈丘县| 宁德市| 桦南县| 河曲县| 神木县| 确山县| 吉木萨尔县| 海原县| 廊坊市| 资中县| 黄浦区| 和平区| 古浪县| 庐江县| 云阳县| 城固县| 北京市| 泗阳县| 常州市| 栖霞市|