隨筆 - 154  文章 - 60  trackbacks - 0
          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          聲明:

          該blog是為了收集資料,認識朋友,學(xué)習(xí)、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載??!

          感謝那些公開自己技術(shù)成果的高人們!!!

          支持開源,尊重他人的勞動??!

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學(xué)習(xí)(技術(shù))

          觀察思考(非技術(shù))

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          代碼:
          import java.security.*;
          import javax.crypto.*;
          public class Crypt {

            
          private static String Algorithm="DES"//定義 加密算法,可用 DES,DESede,Blowfish

            
          static boolean debug = false;

            
          static{
              Security.addProvider(
          new com.sun.crypto.provider.SunJCE());
            }


            
          //生成密鑰, 注意此步驟時間比較長
            public static byte[] getKey() throws Exception{
              KeyGenerator keygen 
          = KeyGenerator.getInstance(Algorithm);
              SecretKey deskey 
          = keygen.generateKey();
              
          if (debug)
                System.out.println(
          "生成密鑰:"+byte2hex(deskey.getEncoded()));
              
          return deskey.getEncoded();
            }


            
          //加密
            public static byte[] encode(byte[] input,byte[] key) throws Exception{
              SecretKey deskey 
          = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
              
          if (debug){
                System.out.println(
          "加密前的二進串:"+byte2hex(input));
                System.out.println(
          "加密前的字符串:"+new String(input));
              }

              Cipher c1 
          = Cipher.getInstance(Algorithm);
              c1.init(Cipher.ENCRYPT_MODE,deskey);
              
          byte[] cipherByte=c1.doFinal(input);
              
          if (debug)
                System.out.println(
          "加密后的二進串:"+byte2hex(cipherByte));
              
          return cipherByte;
            }


            
          //解密
            public static byte[] decode(byte[] input,byte[] key) throws Exception{
              SecretKey deskey 
          = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
              
          if (debug)
                System.out.println(
          "解密前的信息:"+byte2hex(input));
              Cipher c1 
          = Cipher.getInstance(Algorithm);
              c1.init(Cipher.DECRYPT_MODE,deskey);
              
          byte[] clearByte=c1.doFinal(input);
              
          if (debug){
                System.out.println(
          "解密后的二進串:"+byte2hex(clearByte));
                System.out.println(
          "解密后的字符串:"+(new String(clearByte)));
              }

              
          return clearByte;
            }


            
          //md5()信息摘要, 不可逆
            public static byte[] md5(byte[] input) throws Exception{
              java.security.MessageDigest alg
          =java.security.MessageDigest.getInstance("MD5"); //or "SHA-1"
              if (debug){
                System.out.println(
          "摘要前的二進串:"+byte2hex(input));
                System.out.println(
          "摘要前的字符串:"+new String(input));
              }

              alg.update(input);
              
          byte[] digest = alg.digest();
              
          if (debug)
                System.out.println(
          "摘要后的二進串:"+byte2hex(digest));
              
          return digest;
            }


            
          //字節(jié)碼轉(zhuǎn)換成16進制字符串
            public static String byte2hex(byte[] b) {
              String hs
          ="";
              String stmp
          ="";
              
          for (int n=0;n<b.length;n++){
                stmp
          =(java.lang.Integer.toHexString(b[n] & 0XFF));
                
          if (stmp.length()==1)
                  hs
          =hs+"0"+stmp;
                
          else hs=hs+stmp;
                  
          if (n<b.length-1)  
                      hs
          =hs+":";
                }

          //      System.out.println("hs="+hs);
              return hs.toUpperCase();
            }


            
          public static void main(String[] args) throws Exception{
              debug 
          = true;
          //    byte[] key = getKey();
              byte[] key = "好好學(xué)習(xí)".getBytes();
              decode(encode(
          "測試加密".getBytes(),key),key);
          //    md5("測試加密".getBytes());
              md5("A".getBytes());
            }

          }
          posted on 2008-04-14 16:14 lk 閱讀(776) 評論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 尉犁县| 许昌县| 顺昌县| 洛隆县| 北宁市| 栾城县| 沙洋县| 赫章县| 台南县| 潢川县| 洛扎县| 博乐市| 津南区| 台中县| 安平县| 鄂托克前旗| 健康| 金山区| 东乡族自治县| 桐庐县| 沈阳市| 昂仁县| 乐昌市| 砀山县| 格尔木市| 肥城市| 东丽区| 宜都市| 灵台县| 兴文县| 方山县| 遂川县| 永昌县| 福安市| 义马市| 连州市| 隆安县| 北海市| 永兴县| 湘乡市| 大邑县|