Groovy 基于Groovy实现DES加解密

打印 上一主题 下一主题

主题 941|帖子 941|积分 2823

groovy 3.0.7
DES加密简介

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

DES加密
  1. import java.util.Base64;
  2. import javax.crypto.Cipher;
  3. import java.security.Key;
  4. import javax.crypto.SecretKeyFactory;
  5. import javax.crypto.spec.DESKeySpec;
  6. String keyStr = 'h3@FuaKc' // 加解密秘钥
  7. String logInfo = '''{
  8.   'account':'shouke',
  9.   'password':'123'
  10. }
  11. ''';
  12. DESKeySpec dks = new DESKeySpec(keyStr.getBytes('UTF-8'));  
  13. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance('DES');  
  14. Key key = keyFactory.generateSecret(dks);
  15.         
  16. Cipher cipher = Cipher.getInstance('DES');
  17. cipher.init(Cipher.ENCRYPT_MODE, key);
  18. byte[] encodedBytes = cipher.doFinal(logInfo.getBytes()) // 执行加密操作
  19. // 使用加密后的数据,比如 Base64加密
  20. def encodedString = Base64.getEncoder().encodeToString(encodedBytes);
  21. println(encodedString) // 输出:zdTV3dnCOIkmM7DMz0XC5BIPN0JFK4cR2+wb36Jx5IvfVw3bsXmOfdwtQ88ZvWKj
复制代码
DES解密
  1. import java.util.Base64;
  2. import javax.crypto.Cipher;
  3. import java.security.Key;
  4. import javax.crypto.SecretKeyFactory;
  5. import javax.crypto.spec.DESKeySpec;
  6. String keyStr = 'h3@FuaKc';
  7. String b64EncodedString = 'zdTV3dnCOIkmM7DMz0XC5BIPN0JFK4cR2+wb36Jx5IvfVw3bsXmOfdwtQ88ZvWKj'
  8.   
  9. DESKeySpec dks = new DESKeySpec(keyStr.getBytes('UTF-8'));  
  10. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance('DES');  
  11. Key key = keyFactory.generateSecret(dks);
  12.         
  13. Cipher cipher = Cipher.getInstance('DES');
  14. cipher.init(Cipher.DECRYPT_MODE, key);
  15. byte[] b64DecodedString = Base64.getDecoder().decode(b64EncodedString)
  16. def result = new String(cipher.doFinal(b64DecodedString)); // 解密操作
  17. println(result);
复制代码
输出:
  1. {
  2.   'account':'shouke',
  3.   'password':'123'
  4. }
复制代码
相关说明:
  1. 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,密码分组链模式)时必须传入该参数,形如以下:
    1. import java.security.SecureRandom;
    2. // ...
    3. cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom());
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表