网站首页 > 开源技术 正文
一、DES
- DES综合运用了置换、代替、代数等多种密码技术。它设计精巧、实现容易、使用方便,堪称是适应计算机环境的近代分组密码的一个典范。DES的设计充分体现了Shannon所阐述的设计密码的思想,标志着密码的设计与分析达到了新的水平。
- DES是一种分组密码。明文、密文和密钥的分组长度都是64位。
- DES是面向二进制的密码算法。因而能够加解密任何形式的计算机数据。
- DES是对合运算,因而加密和解密共用同一算法,从而使工程实现的工作量减半。
- DES的密码结构属于Feistel结构。
注意:网上可能部分文章中存在DES的加密只适用在windows测试环境
当迁移到生产环境中,执行会发生异常的情况
import java.security.Key;
import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
/**
* 加解密工具类
*/
public class DesUtil {
public static Key setKey(String strKey) {
Key key = null;
try {
KeyGenerator generator = KeyGenerator.getInstance("DES");
//----------此处代码可以解决windowns与生产环境linux的异常情况
SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(strKey.getBytes());
//------------
generator.init(secureRandom); // 根据参数生成key
key = generator.generateKey();
} catch (Exception e) {
e.printStackTrace();
}
return key;
}
/**
* @param source 编码内容
* @param key 密钥
* @param charSet 编码格式
* @return
*/
public static String encrypt(String source, String key, String charSet) {
String encrypt = null;
try {
byte[] ret = encrypt(source.getBytes(charSet), key);
encrypt = new String(Base64.getEncoder().encode(ret));
} catch (Exception e) {
e.printStackTrace();
encrypt = null;
}
return encrypt;
}
/**
* @param encryptedData 解码内容
* @param key 密钥
* @param charSet 编码格式
* @return
*/
public static String decrypt(String encryptedData, String key, String charSet) {
String descryptedData = null;
try {
byte[] ret = descrypt(Base64.getDecoder().decode(encryptedData.getBytes()), key);
descryptedData = new String(ret, charSet);
} catch (Exception e) {
e.printStackTrace();
descryptedData = null;
}
return descryptedData;
}
public static byte[] encrypt(byte[] primaryData, String key) {
Key desKey = setKey(key);
try {
Cipher cipher = Cipher.getInstance("DES"); // Cipher对象实际完成加密操作
cipher.init(Cipher.ENCRYPT_MODE, desKey); // 用密钥初始化Cipher对象(加密)
return cipher.doFinal(primaryData);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static byte[] descrypt(byte[] encryptedData, String key) {
Key desKey = setKey(key);
try {
Cipher cipher = Cipher.getInstance("DES"); // Cipher对象实际完成解密操作
cipher.init(Cipher.DECRYPT_MODE, desKey); // 用密钥初始化Cipher对象(解密)
return cipher.doFinal(encryptedData);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String code = "hello world";
String key = "thisisakey";
String unicode = "utf-8";
String encrypt = encrypt(code, key, unicode);
String decrypt = decrypt(encrypt, key, unicode);
System.out.println("原内容:" + code);
System.out.println("加密:" + encrypt);
System.out.println("解密:" + decrypt);
}
}
二、输出结果
原内容:hello world
加密:2bUjtqfPz5MSxVevldo2Ig==
解密:hello world
Process finished with exit code 0
- 上一篇: 8 种方案,帮你解决重复提交问题
- 下一篇: 分布式ID生成器-百度UidGenerator
猜你喜欢
- 2024-11-26 MySQL分库分表实战
- 2024-11-26 MobaXterm 之 Network Services
- 2024-11-26 SpringBoot系列(十五)整合缓存,项目必用的技术
- 2024-11-26 盘点认证框架 : SpringSecurity OAuth 篇
- 2024-11-26 @Cacheable缓存key生成策略及自定义key
- 2024-11-26 对称加密算法之Java SM4算法应用 附可用工具类
- 2024-11-26 java中加密算法AES和RSA
- 2024-11-26 领域驱动设计系列课程-领域服务(4)
- 2024-11-26 设计模式——简单工厂模式( Simple Factory Pattern )
- 2024-11-26 Spring Boot使用Redis + Cafeine实现二级缓存?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)