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加密與解密實現步驟Java加密解密
- RSA加密解密(無資料大小限制,php、go、java互通實現)加密解密PHPGoJava
- Java之DES加解密解析Java解密
- Java DES 加解密("DES/ECB/PKCS1Padding")Java解密padding
- AES實現財務資料的加密解密儲存加密解密
- 探討NET Core資料進行3DES加密或解密弱金鑰問題3D加密解密
- DES加密加密
- Linux下實現 OpenSSL 簡單加密與解密字串Linux加密解密字串
- Python2 解密易語言DES加密的密文Python解密加密
- Flutter 的加密和解密資料Flutter加密解密
- PHP實現摩斯電碼加密解密PHP加密解密
- RSA加密與解密加密解密
- Java加密解密瞭解Java加密解密
- DES演算法揭秘:資料加密的前沿技術演算法加密
- DES加密詳解加密
- DES加密簡述加密
- python實現Simplified_DES (S-DES)Python
- 後臺對Json資料加密、解密JSON加密解密
- dbms_obfuscation_toolkit(資料加密解密)加密解密
- https與http區別以及https資料加密解密過程HTTP加密解密
- 10:c# mds5與des與rsa加密C#加密
- 影像的加密與解密加密解密
- 區塊鏈背後的資訊保安(2) DES、3DES加密演算法原理及其GO語言實現區塊鏈3D加密演算法Go
- security.js RSA加密與java客戶端解密JS加密Java客戶端解密
- win10加密資料夾如何解密_win10已加密的資料夾如何解密Win10加密解密
- app直播原始碼,android AES加密解密實現APP原始碼Android加密解密
- 通過Go實現AES加密和解密工具Go加密解密
- Go 如何實現 PHP 的密碼加密解密GoPHP密碼加密解密
- 如何在Python中加密和解密資料Python加密解密
- ios des 加/解密(with base64)iOS解密
- utf8 加密與解密加密解密
- Java 常用加密解密演算法Java加密解密演算法
- Java AES加密和解密教程 - BaeldungJava加密解密
- java書籍-《java加密解密的藝術》Java加密解密
- 關於Javascript的des加密JavaScript加密
- 小規模DES手寫加解密解密
- 序列密碼的加密與解密密碼加密解密
- python加密與解密,加簽與驗籤Python加密解密
- 加密解密加密解密