一、DES算法
DES(Data Encryption Standard):數據加密標準,它是由IBM公司研製的一種對稱密碼算法。
DES是一個分組加密算法,典型的DES以64位分組對數據加密,加密和解密用的是用一個算法。
總長度64位,8字節,其中8位作爲校驗碼,不參與加密算法。
二、祕鑰與加密算法
祕鑰是一種參數(它是在明文轉換爲密文或將密文轉換爲明文的算法中輸入的數據)
加密算法是明文轉換爲密文的變換函數,同樣的祕鑰可以用不同的加密算法,得到的密文就不一樣
比如凱撒密碼,就是將字母循環後移n位,這個n就是一個祕鑰,循環後移的方法叫做算法
三、DES加密流程
四、DES加密與解密
提供原始祕鑰:長度64位,8字節
@Test
public void testDES() throws Exception {
// 明文
String plainText = "abcd";
System.out.println("明文:" + plainText);
// 提供原始祕鑰:長度64位,8字節
String originKey = "12345678";
// 根據給定的字節數組構建一個祕鑰
SecretKeySpec key = new SecretKeySpec(originKey.getBytes(), "DES");
// 加密
// 1.獲取加密算法工具類
Cipher cipher = Cipher.getInstance("DES");
// 2.對工具類對象進行初始化,
// mode:加密/解密模式
// key:對原始祕鑰處理之後的祕鑰
cipher.init(Cipher.ENCRYPT_MODE, key);
// 3.用加密工具類對象對明文進行加密
byte[] encipherByte = cipher.doFinal(plainText.getBytes());
// 防止亂碼,使用Base64編碼
String encode = Base64.encodeBase64String(encipherByte);
System.out.println("加密:" + encode);
// 解密
// 2.對工具類對象進行初始化
cipher.init(Cipher.DECRYPT_MODE, key);
// 3.用加密工具類對象對密文進行解密
byte[] decode = Base64.decodeBase64(encode);
byte[] decipherByte = cipher.doFinal(decode);
String decipherText = new String(decipherByte);
System.out.println("解密:" + decipherText);
}
結果: