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

          聲明:

          該blog是為了收集資料,認識朋友,學習、提高技術,所以本blog的內容除非聲明,否則一律為轉載!!

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

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

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學習(技術)

          觀察思考(非技術)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          代碼:
          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;
            }


            
          //字節碼轉換成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 = "好好學習".getBytes();
              decode(encode(
          "測試加密".getBytes(),key),key);
          //    md5("測試加密".getBytes());
              md5("A".getBytes());
            }

          }
          posted on 2008-04-14 16:14 lk 閱讀(767) 評論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 徐水县| 尼玛县| 广灵县| 台东市| 修水县| 英超| 永清县| 浑源县| 宁河县| 襄垣县| 河东区| 法库县| 闻喜县| 农安县| 临武县| 新沂市| 渝北区| 平顺县| 兴安盟| 余江县| 封丘县| 宁陕县| 信宜市| 余姚市| 汪清县| 台南县| 林州市| 德钦县| 连云港市| 陆川县| 常州市| 玛曲县| 文昌市| 嘉义县| 大连市| 宁波市| 房山区| 吉木萨尔县| 凤冈县| 偃师市| 濮阳市|