加密解密算法java实现(2)—DES

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dzh</groupId>
  <artifactId>encrypt-util</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>encrypt-util</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
    	<groupId>commons-codec</groupId>
	    <artifactId>commons-codec</artifactId>
	    <version>1.9</version>
	</dependency>
  </dependencies>
</project>

下面的代码要用到我写的BASE64工具类。参考 《加密解密算法java实现(1)-BASE64》

下面的代码中的密钥可以自行更换,个数为8的倍数!

java代码如下:

package com.dzh.des;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import com.dzh.base64.BASE64Util;
/**
 * DES加密解密
 * 原文相同,密钥相同,DES加密后的密文是一样的
 */
public class DESUtil {
	/**
	 * DES算法密钥
	 * 个数为8的倍数
	 */
	private static final byte[] DES_KEY = {125, -120, 52, 45, 98, -78, 85, -12, 45, -12, 69, 51, 30, -122, 45, -33};
	private static final String ALGORITHM_DES = "DES";
	private static final String TRANSFORMATION = "DES";
	
	/**
	 * 加密
	 * @param source
	 * @return
	 * @throws Exception
	 */
	public static String encode(String source) throws Exception {
		SecureRandom sr = new SecureRandom();//DES算法要求有一个可信任的随机数源
		DESKeySpec desks = new DESKeySpec(DES_KEY);
		SecretKeyFactory factory = SecretKeyFactory.getInstance(ALGORITHM_DES);//创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
		SecretKey secretKey = factory.generateSecret(desks);
		Cipher cipher = Cipher.getInstance(TRANSFORMATION);//加密对象
		cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);
		String result = BASE64Util.encodeByte(cipher.doFinal(source.getBytes()));//加密,并把字节数组编码成字符串
		
		return result;
	}
	
	/**
	 * 解密
	 * @param source
	 * @return
	 * @throws Exception
	 */
	public static String decode(String source) throws Exception {
		SecureRandom sr = new SecureRandom();//DES算法要求有一个可信任的随机数源
		DESKeySpec desks = new DESKeySpec(DES_KEY);
		SecretKeyFactory factory = SecretKeyFactory.getInstance(ALGORITHM_DES);//创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
		SecretKey secretKey = factory.generateSecret(desks);
		Cipher cipher = Cipher.getInstance(TRANSFORMATION);//解密对象
		cipher.init(Cipher.DECRYPT_MODE, secretKey, sr);
		String result = new String(cipher.doFinal(BASE64Util.decodeToByte(source)));//把字符串解码为字节数组,并解密
		return result;
	}
	
	/**
	 * 示例
	 * 支持中文 空格 字符
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		String source = "12dfefDKLJKLKL464d中文f465as43f1a3 f46e353D1F34&*^$E65F46EF43456abcd54as56f00ef";
		String encodeData = DESUtil.encode(source);//先加密
		System.out.println("加密后:\n" + encodeData);
		String decodeData = DESUtil.decode(encodeData);//解密
		System.out.println("解密后:\n" + decodeData);
		System.out.println("解密后是否和原文相同:" + source.equals(decodeData));
	}
}

按照示例代码使用即可


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的DES加密解密算法Java实现代码,密钥由用户输入: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.util.Base64; import java.util.Scanner; public class DesDemo { private static final String ALGORITHM = "DES"; public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); // 获取密钥 System.out.print("请输入密钥:"); String keyString = scanner.nextLine(); byte[] keyBytes = keyString.getBytes(); // 生成密钥 DESKeySpec keySpec = new DESKeySpec(keyBytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); SecretKey key = keyFactory.generateSecret(keySpec); // 加密 Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key); System.out.print("请输入要加密的字符串:"); String input = scanner.nextLine(); byte[] inputBytes = input.getBytes(); byte[] encryptedBytes = cipher.doFinal(inputBytes); String encryptedString = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("加密后的字符串:" + encryptedString); // 解密 cipher.init(Cipher.DECRYPT_MODE, key); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedString)); String decryptedString = new String(decryptedBytes); System.out.println("解密后的字符串:" + decryptedString); } } ``` 运行该程序,会提示用户输入密钥和要加密的字符串,然后输出加密后的字符串和解密后的字符串。请注意,此处使用了Java的Base64编码和解码工具类,需要在Java 8及以上版本中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值