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)
-
opmode
:Cipher.ENCRYPT_MODE
--加密模式,Cipher.DECRYPT_MODE
--解密模式 -
key :密匙,使用传入的盐构造出一个密匙,可以使用
SecretKeySpec
、KeyGenerator
和KeyPairGenerator
创建密匙,其中SecretKeySpec
和KeyGenerator
支持AES,DES,DESede三种加密算法创建密匙,KeyPairGenerator
支持RSA加密算法创建密匙 -
params
:使用CBC模式(Cipher Block Chaining mode,密码分组链模式)时必须传入该参数,形如以下:import java.security.SecureRandom; // ... cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom());
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库