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 阅读(228) 评论(0) 编辑 收藏 举报