摘要:加密算法筆記算法實現在使用中發現,經過加密的字符串如果要進行傳輸,需要使用進行編碼,這樣能保證加密信息的完整性,確保將來解密成功。
Java加密算法筆記--DES算法實現
在使用中發現,經過加密的字符串如果要進行傳輸,需要使用Base64進行編碼,這樣能保證加密信息的完整性,確保將來解密成功。
import java.security.SecureRandom; import java.util.Base64; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKey; import javax.crypto.Cipher; public class DES { /** * 測試方法 */ public static void main(String[] args) { String str = "你好,goldlone"; //密碼最好是8的倍數 String password = "12345678"; String encryStr = DES.encrypt(str, password); System.out.println("加密結果:"+encryStr); String decryStr = DES.decrypt(encryStr, password); System.out.println("解密結果:"+decryStr); } /** * 進行加密操作 * 參數一:待加密的字符串,參數二:加密密鑰 * 返回經過Base64編碼后的字符串 * 編碼格式為UTF-8 */ public static String encrypt(String encryptionStr, String password) { try{ byte[] encryptionBytes = encryptionStr.getBytes("UTF-8"); SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 創建一個密鑰工廠,然后用它把DESKeySpec轉換成 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher對象實際完成加密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密鑰初始化Cipher對象 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); // 執行加密操作 byte[] encryptionBase64Bytes = Base64.getEncoder().encode(cipher.doFinal(encryptionBytes)); // 轉換為字符串返回 return new String(encryptionBase64Bytes); }catch(Exception e){ e.printStackTrace(); } return null; } /** * 進行解密操作 * 參數一:待解密的字符串,參數二:加密密鑰 * 返回解密后的字符串 */ public static String decrypt(String decryptionBase64Str, String password) { try { byte[] decryptionbytes = Base64.getDecoder().decode(decryptionBase64Str); // DES算法要求有一個可信任的隨機數源 SecureRandom random = new SecureRandom(); // 創建一個DESKeySpec對象 DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 創建一個密鑰工廠 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // 將DESKeySpec對象轉換成SecretKey對象 SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher對象實際完成解密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密鑰初始化Cipher對象 cipher.init(Cipher.DECRYPT_MODE, securekey, random); // 開始解密操作 return new String(cipher.doFinal(decryptionbytes), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return null; } }
運行結果:
加密結果:E5t/WSZKkVlr0Uw9cMffffdQ==
解密結果:你好,goldlone
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66971.html
時間:2017年4月11日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...
摘要:對稱加密算法概念加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。特點算法公開相比非對稱加密計算量小加密速度快效率高。 對稱加密算法概念 加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。 特點:算法公開、(相比非對稱加密)計算量小、加密速度快、效率高。 弱點:雙方都使用同樣的密鑰,安全性得不到保證。 常用對稱加密算法 DES(Data Encryption Standard...
摘要:系列密碼學二傳送門密碼學一基礎密碼學算法分類消息編碼消息摘要類,類,對稱密碼非對稱密碼數字簽名五元組明文原始信息。非對稱密碼包提供給,,等非對稱加密算法。對稱加密算法在分布式網絡系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。 前言 最近一場面試,面試官問了我 對稱加密與非對稱加密的問題,雖然曾經看過一些內容,但是沒有系統的整理,所以當被問的時候,腦子里一片空白,沒有回答上...
閱讀 3689·2021-10-13 09:40
閱讀 3149·2021-10-09 09:53
閱讀 3551·2021-09-26 09:46
閱讀 1849·2021-09-08 09:36
閱讀 4248·2021-09-02 09:46
閱讀 1314·2019-08-30 15:54
閱讀 3179·2019-08-30 15:44
閱讀 1023·2019-08-30 11:06