隨筆 - 5, 文章 - 0, 評論 - 1, 引用 - 0
          數據加載中……

          DES算法簡單例程

          2.4 DES算法簡介
          DES即分組加密算法,明文密文都使用64位數據分組;采用對稱算法,加密和解密算法相同,但是使用的密鑰不同,密鑰使用56位數;由于算法只使用了簡單的數據邏輯和算術運算,所以實現起來相對簡單。本文就使用DES算法來給出一個加解密工具類。
          3.java 實現的對字符串加解密工具類
          import java.io.*;
          import javax.crypto.*;
          import javax.crypto.spec.*;
          import java.security.*;
          import java.security.spec.*;
          import com.sun.crypto.provider.SunJCE;
          import java.io.Serializable;

          /**
          * 提供加密算法,可以對輸入的字符串進行加密、解密操作
          */
          public class EncryptData
          {
          byte[] encryptKey;
          DESedeKeySpec spec;
          SecretKeyFactory keyFactory;
          SecretKey theKey;
          Cipher cipher;
          IvParameterSpec IvParameters;

          public EncryptData()
          {
          try
          {
          // 檢測是否有 TripleDES 加密的供應程序
          // 如無,明確地安裝SunJCE 供應程序
          try{ Cipher c = Cipher.getInstance("DESede"); }
          catch (Exception e)
          {
          System.err.println("Installling SunJCE provider.");
          Provider sunjce = new com.sun.crypto.provider.SunJCE();
          Security.addProvider(sunjce);
          }
          // 創建一個密鑰
          encryptKey = "This is a test DESede Key".getBytes();

          // 為上一密鑰創建一個指定的 DESSede key
          spec = new DESedeKeySpec(encryptKey);

          // 得到 DESSede keys
          keyFactory = SecretKeyFactory.getInstance("DESede");

          // 生成一個 DESede 密鑰對象
          theKey = keyFactory.generateSecret(spec);

          // 創建一個 DESede 密碼
          cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

          // 為 CBC 模式創建一個用于初始化的 vector 對象
          IvParameters =
          new IvParameterSpec(new byte[]{12,34,56,78,90,87,65,43} );
          }
          catch (Exception exc)
          {
          // 記錄加密或解密操作錯誤
          }
          }

          /**
          * 加密算法
          * @param password 等待加密的密碼
          * @return 加密以后的密碼
          * @throws Exception
          */
          public byte[] encrypt(String password)
          {
          String encrypted_password = null;
          byte[] encrypted_pwd = null;

          try
          {
          // 以加密模式初始化密鑰
          cipher.init(Cipher.ENCRYPT_MODE,theKey,IvParameters);

          // 加密前的密碼(舊)
          byte[] plainttext = password.getBytes();

          // 加密密碼
          encrypted_pwd = cipher.doFinal(plainttext);

          // 轉成字符串,得到加密后的密碼(新)
          encrypted_password = new String(encrypted_pwd);
          }
          catch(Exception ex)
          {
          // 記錄加密錯誤
          }
          return encrypted_pwd;
          }

          /**
          * 解密算法
          * @param password 加過密的密碼
          * @return 解密后的密碼
          */
          public String decrypt(byte[] password)
          {
          String decrypted_password = null;
          try
          {
          // 以解密模式初始化密鑰
          cipher.init(Cipher.DECRYPT_MODE,theKey,IvParameters);

          // 構造解密前的密碼
          byte[] decryptedPassword = password;

          // 解密密碼
          byte[] decrypted_pwd = cipher.doFinal(decryptedPassword);
          // 得到結果
          decrypted_password = new String(decrypted_pwd);
          }
          catch(Exception ex)
          {
          // 記錄解密錯誤
          }
          return decrypted_password;
          }
          }

          posted on 2007-03-28 13:17 黑馬_2046 閱讀(851) 評論(1)  編輯  收藏 所屬分類: 加密解密

          評論

          # re: DES算法簡單例程  回復  更多評論   

          這個寫的不錯
          2007-08-10 09:40 | dreamstone

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


          網站導航:
           
          主站蜘蛛池模板: 灵石县| 松溪县| 衡东县| 昌平区| 布尔津县| 青铜峡市| 西林县| 阿瓦提县| 仙桃市| 拉孜县| 蛟河市| 太仆寺旗| 泗水县| 榆社县| 秦皇岛市| 扎赉特旗| 五原县| 英吉沙县| 酉阳| 亚东县| 会昌县| 宿州市| 环江| 龙州县| 宁安市| 静宁县| 莒南县| 阿克陶县| 沅陵县| 天津市| 界首市| 县级市| 涞源县| 安陆市| 邯郸县| 调兵山市| 兴化市| 定南县| 平和县| 鹤山市| 溆浦县|