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