java實現DES資料加密與解密
DES加密原理
DES 使用一個 56 位的金鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文字塊分成兩半。使用子金鑰對其中一半應用迴圈功能,然後將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續下去,但最後一個迴圈不交換。DES 使用 16 個迴圈,使用異或,置換,代換,移位操作四種基本運算。 解密反之。
接下來是我做測試的程式碼:
DES資料加密清單:
- /**
- * DES演算法金鑰
- */
- private static final byte[] DES_KEY = { 21, 1, -110, 82, -32, -85, -128, -65 };
- /**
- * 資料加密,演算法(DES)
- *
- * @param data
- * 要進行加密的資料
- * @return 加密後的資料
- */
- public static String encryptBasedDes(String data) {
- String encryptedData = null;
- try {
- // DES演算法要求有一個可信任的隨機數源
- SecureRandom sr = new SecureRandom();
- DESKeySpec deskey = new DESKeySpec(DES_KEY);
- // 建立一個密匙工廠,然後用它把DESKeySpec轉換成一個SecretKey物件
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
- SecretKey key = keyFactory.generateSecret(deskey);
- // 加密物件
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.ENCRYPT_MODE, key, sr);
- // 加密,並把位元組陣列編碼成字串
- encryptedData = new sun.misc.BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
- } catch (Exception e) {
- // log.error("加密錯誤,錯誤資訊:", e);
- throw new RuntimeException("加密錯誤,錯誤資訊:", e);
- }
- return encryptedData;
- }
DES資料解密清單:
- /**
- * 資料解密,演算法(DES)
- *
- * @param cryptData
- * 加密資料
- * @return 解密後的資料
- */
- public static String decryptBasedDes(String cryptData) {
- String decryptedData = null;
- try {
- // DES演算法要求有一個可信任的隨機數源
- SecureRandom sr = new SecureRandom();
- DESKeySpec deskey = new DESKeySpec(DES_KEY);
- // 建立一個密匙工廠,然後用它把DESKeySpec轉換成一個SecretKey物件
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
- SecretKey key = keyFactory.generateSecret(deskey);
- // 解密物件
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.DECRYPT_MODE, key, sr);
- // 把字串解碼為位元組陣列,並解密
- decryptedData = new String(cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(cryptData)));
- } catch (Exception e) {
- // log.error("解密錯誤,錯誤資訊:", e);
- throw new RuntimeException("解密錯誤,錯誤資訊:", e);
- }
- return decryptedData;
- }
測試清單:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String str="0123456789abcdefg";
- // DES資料加密
- String s1=encryptBasedDes(str);
- System.out.println(s1);
- // DES資料解密
- String s2=decryptBasedDes(s1);
- System.err.println(s2);
- }
輸出結果:
- eUhQ+Ko1BJh5j4ok/VKL/LrUgmg0n8vV
- 0123456789abcdefg
相關文章
- java使用DES加密方式,實現對資料的加密解密Java加密解密
- java 實現 DES加密 解密演算法Java加密解密演算法
- JAVA和C# 3DES加密解密JavaC#3D加密解密
- 使用Java加密與解密實現步驟Java加密解密
- C#DES加密和解密C#加密解密
- 用vb實現DES加解密演算法(二)--加密 (轉)解密演算法加密
- DES加密和解密PHP,Java,ObjectC統一的方法加密解密PHPJavaObject
- RSA加密解密(無資料大小限制,php、go、java互通實現)加密解密PHPGoJava
- DES java後臺解密Java解密
- 傻瓜式教學DES加密、解密加密解密
- Android資料加密之Des加密Android加密
- DES對稱資料加密加密
- Java DES 加解密("DES/EBC/NoPadding")Java解密padding
- C語言實現DES加密C語言加密
- Java之DES加解密解析Java解密
- Java中的加密與解密Java加密解密
- 【知識積累】DES演算法之C#加密&Java解密演算法C#加密Java解密
- 用vb實現DES加解密演算法(三)--解密 (轉)解密演算法
- AES實現財務資料的加密解密儲存加密解密
- DES/3DES/AES 三種對稱加密演算法在 Java 中的實現3D加密演算法Java
- Java DES 加解密("DES/ECB/PKCS1Padding")Java解密padding
- Java DES 加解密("DES/CBC/PKCS5Padding")Java解密padding
- RSA加密解密及數字簽名Java實現加密解密Java
- 使用Des,MD5 加密.解密.字串.檔案 (轉)加密解密字串
- Java加密解密Java加密解密
- 探討NET Core資料進行3DES加密或解密弱金鑰問題3D加密解密
- DES加密加密
- 小程式加密資料解密演算法java版加密解密演算法Java
- Linux下實現 OpenSSL 簡單加密與解密字串Linux加密解密字串
- PHP和.NET通用的加密解密函式類,均使用3DES加解密PHP加密解密函式3D
- RSA加密與解密加密解密
- Python2 解密易語言DES加密的密文Python解密加密
- Flutter 的加密和解密資料Flutter加密解密
- PHP實現摩斯電碼加密解密PHP加密解密
- DES加密解密(適用Windows和Linux系統)防止linux下解密失敗加密解密WindowsLinux
- Java加密解密瞭解Java加密解密
- 用VB實現DES加解密演算法(一)--定義 (轉)解密演算法
- PhpAES加密、解密與Java互操作的問題PHP加密解密Java