900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java代码实现DES算法加密解密功能

Java代码实现DES算法加密解密功能

时间:2021-09-07 23:00:47

相关推荐

Java代码实现DES算法加密解密功能

一、概述

DES加密算法是一种对称加密,所谓对称加密就是加密和解密都是用同一把密钥。

二、详细代码

import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.SecretKeySpec;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.util.Base64;public class Test3 {public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, BadPaddingException, InvalidKeyException, IllegalBlockSizeException {/** 1.明文* 2.提供原始密钥:长度64位,8个字节** 加密算法:就是通过对比特位进行一些数学运算* */String clearText = "一直在努力的笨鸟";//明文String originKey = "他长的是真鸡儿帅啊";//原始密钥String cipherText = desEncript(clearText,originKey);//明文-->密文System.out.println("明文: " + clearText);System.out.println("明文-->密文: " + cipherText);String cipherText2 = desDecript(cipherText,originKey);//密文-->明文System.out.println("密文-->明文: " + cipherText2);}/*** 用DES算法进行加密* @param clearText* @param originKey* @return* @throws NoSuchPaddingException* @throws NoSuchAlgorithmException* @throws InvalidKeyException* @throws BadPaddingException* @throws IllegalBlockSizeException*/private static String desEncript(String clearText, String originKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {//1.获取加密算法工具类对象 参数:转换的名称,例如 DES/CBC/PKCS5Padding。Cipher cipher = Cipher.getInstance("DES");/** 2.* public final void init(int opmode,Certificate certificate) throws InvalidKeyException* 对工具类对象进行初始化** 参数 opmode:加密/解密模式*DECRYPT_MODE 用于将 Cipher 初始化为 解密 模式的常量。*ENCRYPT_MODE 用于将 Cipher 初始化为 加密 模式的常量。* 参数 certificate:对原始密钥处理之后的密钥** 注意:加密解密模式要选对,我当时写加密的时候选了DECRYPT_MODE,报了一个这个错*Input length must be multiple of 8 when decrypting with padded cipher*莫名其妙,研究好久才发现。* */SecretKeySpec key = getKey(originKey);cipher.init(Cipher.ENCRYPT_MODE,key);//3.用加密工具类对象对明文进行加密-->密文byte[] doFinal = cipher.doFinal(clearText.getBytes());//密文转换成base64编码,解决密文乱码问题byte[] encode = Base64.getEncoder().encode(doFinal);return new String(encode);}/*** 不论原始密钥originKey多长,我们都要醒程一个8个字节的原始密钥* @param originKey* @return*/private static SecretKeySpec getKey(String originKey) {//byte数组每个元素默认初始值位0byte[] buffer = new byte[8];//获取用户提供的原始密钥字节数组byte[] originKeyBytes = originKey.getBytes();//如果originKeyBytes.length > 8,只要8个字节,如果没有超过8个字节,就用默认初始值来填充for (int i = 0; i < 8 && i < originKeyBytes.length; i++) {buffer[i] = originKeyBytes[i];}/** public SecretKeySpec(byte[] key, String algorithm) 根据给定的字节数组构造一个密钥* 参数 key:密钥的密钥内容。* 参数 algorithm:与给定的密钥内容相关联的密钥算法的名称。* */SecretKeySpec key = new SecretKeySpec(buffer, "DES");return key;}/*** 用DES算法进行解密* @param cipherText* @param originKey* @return* @throws NoSuchPaddingException* @throws NoSuchAlgorithmException* @throws InvalidKeyException* @throws BadPaddingException* @throws IllegalBlockSizeException*/private static String desDecript(String cipherText, String originKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {Cipher cipher = Cipher.getInstance("DES");SecretKeySpec key = getKey(originKey);cipher.init(Cipher.DECRYPT_MODE,key);//注意:因为密文是用Base64转换后的,所以在doFinal以前要用Base64转一下byte[] decode = Base64.getDecoder().decode(cipherText);byte[] doFinal = cipher.doFinal(decode);return new String(doFinal);}}

三、执行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。