隨筆 - 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 閱讀(774) 評論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 沈阳市| 邳州市| 襄樊市| 拜城县| 镶黄旗| 西乡县| 阿拉善左旗| 太仓市| 楚雄市| 承德县| 丽江市| 永寿县| 乐山市| 天柱县| 屏东市| 思茅市| 新丰县| 密山市| 鄂托克前旗| 伊金霍洛旗| 长春市| 北票市| 岐山县| 商城县| 东丰县| 南郑县| 连云港市| 洮南市| 会同县| 福鼎市| 迭部县| 屯留县| 资中县| 格尔木市| 呼玛县| 益阳市| 乐业县| 札达县| 咸阳市| 延边| 屏东县|