DES/AES Demo

Posted dengw125792

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DES/AES Demo相关的知识,希望对你有一定的参考价值。

package t2;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class DesAesDemo {

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {

// 原文
String input = "科学";
System.out.println("原文:" + input);
// 定义key DES加密,密钥key必须是8字节

//如果使用AES,key为16字节
String key = "12345678";
// 算法
String transformation = "DES";
// 创建加密对象
Cipher cipher = Cipher.getInstance(transformation);
// 加密类型
String algorithm = "DES";
String encryptDes = encryptDes(input, key, cipher, algorithm);
System.out.println("加密:" + encryptDes);
String decryptDes = decryptDes(encryptDes, key, transformation, algorithm);
System.out.println("解密:" + decryptDes);

}

// 解密
private static String decryptDes(String encryptDes, String key, String transformation, String algorithm)
throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException,
BadPaddingException {

Cipher cipher = Cipher.getInstance(transformation);
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(encryptDes));
return new String(bytes);

}

// 加密
private static String encryptDes(String input, String key, Cipher cipher, String algorithm)
throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// 创建加密规则
// 第一个参数表示key的字节
// 第二个参数表示加密类型
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);

// 进行加密初始化
// 第一个参数表示模式 加密模式 解密模式
// 第二个参数表示:加密规则
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 調用加密方法
// 参数表示原文的字节数组
byte[] bytes = cipher.doFinal(input.getBytes());
// 会出现乱码 因為在編碼表上找不到字符
// System.out.println(new String(bytes));
// for (byte b : bytes) {
// System.out.println((int) b);
// }
// 創建base64转码
String base64 = new String(Base64.getEncoder().encode(bytes));
return base64;
}
}

 

=============

原文:科学
加密:l2A+Pb0g5xA=
解密:科学

以上是关于DES/AES Demo的主要内容,如果未能解决你的问题,请参考以下文章

DES和AES算法的比较各自优缺点都有哪些

iOS DES,AES加密

DES/3DES/AES区别

DES/3DES/AES区别

java-信息安全-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

对称加密方案学习 DES / 3DES / AES