Groovy 基于Groovy实现DES加解密

简介: Groovy 基于Groovy实现DES加解密

groovy 3.0.7

DES加密简介

加密分为对称加密和非对称加密。非对称加密,加解密使用不同的密钥,如RSA;对称加密,加解密使用相同的密钥,如DES(Data Encryption Standard,即数据加密标准)。相对而言,非对称加密安全性更高,但是计算过程复杂耗时,一般只应用于关键信息,非关键信息可以考虑使用对称加密。

代码实现

DES加密

import java.util.Base64;
import javax.crypto.Cipher;
import java.security.Key;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
String keyStr = 'h3@FuaKc' // 加解密秘钥
String logInfo = '''{
  'account':'shouke',
  'password':'123'
}
''';
DESKeySpec dks = new DESKeySpec(keyStr.getBytes('UTF-8'));  
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance('DES');  
Key key = keyFactory.generateSecret(dks); 
Cipher cipher = Cipher.getInstance('DES');
cipher.init(Cipher.ENCRYPT_MODE, key); 
byte[] encodedBytes = cipher.doFinal(logInfo.getBytes()) // 执行加密操作
// 使用加密后的数据,比如 Base64加密
def encodedString = Base64.getEncoder().encodeToString(encodedBytes);
println(encodedString) // 输出:zdTV3dnCOIkmM7DMz0XC5BIPN0JFK4cR2+wb36Jx5IvfVw3bsXmOfdwtQ88ZvWKj

DES解密

import java.util.Base64;
import javax.crypto.Cipher;
import java.security.Key;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
String keyStr = 'h3@FuaKc';
String b64EncodedString = 'zdTV3dnCOIkmM7DMz0XC5BIPN0JFK4cR2+wb36Jx5IvfVw3bsXmOfdwtQ88ZvWKj'
DESKeySpec dks = new DESKeySpec(keyStr.getBytes('UTF-8'));  
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance('DES');  
Key key = keyFactory.generateSecret(dks); 
Cipher cipher = Cipher.getInstance('DES');
cipher.init(Cipher.DECRYPT_MODE, key); 
byte[] b64DecodedString = Base64.getDecoder().decode(b64EncodedString)
def result = new String(cipher.doFinal(b64DecodedString)); // 解密操作
println(result);

输出:

{
  'account':'shouke',
  'password':'123'
}

相关说明:

Cipher.init(int opmode, Key key, AlgorithmParameterSpec params)
  • opmodeCipher.ENCRYPT_MODE--加密模式,Cipher.DECRYPT_MODE--解密模式
  • key :密匙,使用传入的盐构造出一个密匙,可以使用SecretKeySpecKeyGeneratorKeyPairGenerator创建密匙,其中SecretKeySpecKeyGenerator支持AES,DES,DESede三种加密算法创建密匙,KeyPairGenerator支持RSA加密算法创建密匙
  • params :使用CBC模式(Cipher Block Chaining mode,密码分组链模式)时必须传入该参数,形如以下:
import java.security.SecureRandom;
// ...
cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom());
目录
相关文章
|
Oracle Java Unix
Java/JDK下载、安装与环境变量配置超详细教程(2022更新)保姆级,秒会
Java/JDK下载、安装与环境配置超详细教程(2022更新)保姆级,小白秒会[学习必备,建议收藏]。包含JDK8、JDK11、JDK17、JDK19等,本文将从JDK的下载与安装讲起,在从配置到第一个HelloWrold实践结束。在观看本文前我们需要知道JDK是什么,有什么作用?JDK是Java的开发工具包,包括JVM虚拟机,核心类库,开发工具。
27207 0
Java/JDK下载、安装与环境变量配置超详细教程(2022更新)保姆级,秒会
|
6月前
|
机器学习/深度学习 人工智能 JSON
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
688 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
|
编解码 NoSQL Java
使用Spring Boot + Redis 队列实现视频文件上传及FFmpeg转码的技术分享
【8月更文挑战第30天】在当前的互联网应用中,视频内容的处理与分发已成为不可或缺的一部分。对于视频平台而言,高效、稳定地处理用户上传的视频文件,并对其进行转码以适应不同设备的播放需求,是提升用户体验的关键。本文将围绕使用Spring Boot结合Redis队列技术来实现视频文件上传及FFmpeg转码的过程,分享一系列技术干货。
724 4
|
12月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
129006 33
通义灵码编程智能体上线,支持Qwen3模型
|
12月前
|
JavaScript Java PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
550 7
|
数据库 开发者
|
数据可视化 Linux 测试技术
7zip压缩工具的Linux命令
本文介绍了如何在Linux系统中使用7zip压缩工具,包括通过brew安装、使用基本命令进行文件压缩、解压、列出存档内容、测试存档完整性以及进行性能基准测试等操作。
605 3
7zip压缩工具的Linux命令
|
Cloud Native Java Go
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
1601 0
|
消息中间件 API
SofaMQ一些常用的API
SofaMQ一些常用的API
996 1