700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用java实现3DES加密解密算法

用java实现3DES加密解密算法

时间:2022-11-15 01:06:13

相关推荐

用java实现3DES加密解密算法

3DES加密也称三重加密,其底层加密算法与DES相同,只不过它的密钥长度是168位。由于在DES加密算法中,64位密钥中每一个字节的第8位是奇偶校验位,所以每个字节中只有后7位起密钥作用,实际是56位密钥长度。但是在3DES加密算法中,需要三个这样的密钥长度才能实现三重加密操作,所以3DES的密钥长度是56✖3=168,算上每个字节的奇偶校验位,则应该输入的密钥长度是168+24=192,即24个字节长度的密钥。在java中实现3DES加密算法的加密关键词是:DESede。以下是在DES加密解密操作的基础上改进的3DES加密解密算法:

import .apache.xerces.internal.impl.dv.util.Base64;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.Key;import java.security.NoSuchAlgorithmException;import java.util.Scanner;public class TripleDES {private static final String Algorithm="DESede";public static void main(String[] args) throws Exception{System.out.println("请输入明文:");Scanner in=new Scanner(System.in);String clearText=in.nextLine();System.out.println("请输入24字节的密钥(每输入一个字符代表一个字节):");Scanner in1=new Scanner(System.in);String originKey=in1.nextLine();String cipherText = desEncript(clearText, originKey);System.out.println("通过3DES加密后的结果是:");System.out.println(cipherText);String clearText1=desDecript(cipherText,originKey);System.out.println("解密结果是:\n"+clearText1);}/*** 加密算法* @param clearText* @param originKey* @return* @throws NoSuchAlgorithmException* @throws NoSuchPaddingException* @throws InvalidKeyException* @throws BadPaddingException* @throws IllegalBlockSizeException*/private static String desEncript(String clearText, String originKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException{Cipher cipher=Cipher.getInstance(Algorithm); /*提供加密的方式:DES*/SecretKeySpec key=getKey(originKey); /*对密钥进行操作,产生16个48位长的子密钥*/cipher.init(Cipher.ENCRYPT_MODE,key); /*初始化cipher,选定模式,这里为加密模式,并同时传入密钥*/byte[] doFinal=cipher.doFinal(clearText.getBytes()); /*开始加密操作*/String encode= Base64.encode(doFinal); /*对加密后的数据按照Base64进行编码*/return encode;}/*** 解密算法* @param cipherText* @param originKey* @return* @throws BadPaddingException* @throws IllegalBlockSizeException* @throws NoSuchPaddingException* @throws NoSuchAlgorithmException* @throws InvalidKeyException*/private static String desDecript(String cipherText, String originKey) throws BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException{Cipher cipher=Cipher.getInstance(Algorithm); /*初始化加密方式*/Key key=getKey(originKey); /*获取密钥*/cipher.init(Cipher.DECRYPT_MODE,key); /*初始化操作方式*/byte[] decode=Base64.decode(cipherText); /*按照Base64解码*/byte[] doFinal=cipher.doFinal(decode); /*执行解码操作*/return new String(doFinal); /*转换成相应字符串并返回*/}/*** 获取密钥算法* @param originKey* @return*/private static SecretKeySpec getKey(String originKey){byte[] buffer=new byte[24];byte[] originBytes=originKey.getBytes();/*** 防止输入的密钥长度超过192位*/for(int i=0;i<24&&i<originBytes.length;i++){buffer[i]=originBytes[i]; /*如果originBytes不足8,buffer剩余的补零*/}SecretKeySpec key=new SecretKeySpec(buffer,Algorithm); /*第一个参数是密钥字节数组,第二个参数是加密方式*/return key; /*返回操作之后得到的密钥*/}}

程序运行结果如下:

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