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编辑  收藏  举报

导航