DES-对称加密
对于大多数对称加密算法而言,解密算法是加密算法的逆运算,加密密钥和解密密钥相同。
在对称加密算法中,DES最具有代表性,堪称典范;DESede是DES算法的变种;AES算法则作为DES算法的替代者;而IDEA算法作为一种强加密算法,成为电子邮件加密软件PGP(pretty good privacy)的核心算法之一。
在Java实现层面上,DES、DESede、AES和IDEA这4种算法略有不同。
DES和DESede算法在使用密钥材料还原密钥时,建议使用各自相应的密钥材料实现类(DES算法对应DESKeySpec类,DESede算法对应DESedeKeySpec类)完成相应的转换操作。
AES算法在使用密钥材料还原密钥时,则需要使用一般密钥材料实现类(SecretKeySpec类)完成相应的转换操作。其他对称加密算法可参照该方式实现,如RC2、RC4、Blowfish以及IDEA等算法均可参照AES算法实现方式做相应实现。
package com.ant.jdk8.encrypt;
import org.apache.commons.io.FileUtils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Base64;
/**
* @date 2019/1/20
*/
public class DESDemo {
public static void main(String[] args) throws Exception {
String data = "城头变幻大王旗";
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
String secretKeyBase64String = Base64.getEncoder().encodeToString(secretKey.getEncoded());
FileUtils.writeStringToFile(new File("D:\\des_secret_key.pem"), secretKeyBase64String, Charset.forName("utf-8"));
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] bytesEncrypt = cipher.doFinal(data.getBytes(Charset.forName("utf-8")));
System.out.println("加密后:"+Base64.getEncoder().encodeToString(bytesEncrypt));
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] bytesDecrypt = cipher.doFinal(bytesEncrypt);
System.out.println("解密后:"+new String(bytesDecrypt, Charset.forName("utf-8")));
}
}
posted on 2019-01-20 23:03 shammgod_code 阅读(251) 评论(0) 收藏 举报
浙公网安备 33010602011771号