分享

SpringBoot对properties文件进行加密解密

 瀚海璨夜 2019-05-14
                                                      版权声明: https://blog.csdn.net/Dongguabai/article/details/81114569

主要参考博客:https://blog.csdn.net/sz85850597/article/details/80396321

主要使用的jasypt-spring-boot这个开源工具。

引入maven依赖

配置加解密Bean

  1. @Configuration
  2. public class EncryptionPropertyConfig {
  3. @Bean(name = "encryptablePropertyResolver")
  4. public EncryptablePropertyResolver encryptablePropertyResolver() {
  5. return new EncryptionPropertyResolver();
  6. }
  7. class EncryptionPropertyResolver implements EncryptablePropertyResolver {
  8. @Override
  9. public String resolvePropertyValue(String value) {
  10. if (StringUtils.isBlank(value)) {
  11. return value;
  12. }
  13. // 值以DES@开头的均为DES加密,需要解密
  14. if (value.startsWith("DES@")) {
  15. return resolveDESValue(value.substring(4));
  16. }
  17. // 不需要解密的值直接返回
  18. return value;
  19. }
  20. private String resolveDESValue(String value) {
  21. // 自定义DES密文解密
  22. return DesUtil.decrypt(value, DesUtil.KEY);
  23. }
  24. }
  25. }

编写加解密工具类

之前在github上找到的工具类,抱歉之前没留下原地址。

  1. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  2. public class DesUtil {
  3. /** 默认key */
  4. public final static String KEY = "ScAKC0XhadTHT3Al0QIDAQAB";
  5. /**
  6. * DES加密
  7. *
  8. *
  9. * @param data
  10. * 待加密字符串
  11. * @param key
  12. * 校验位
  13. * @return
  14. */
  15. public static String encrypt(String data,String key) {
  16. String encryptedData = null;
  17. try {
  18. // DES算法要求有一个可信任的随机数源
  19. SecureRandom sr = new SecureRandom();
  20. DESKeySpec deskey = new DESKeySpec(key.getBytes());
  21. // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
  22. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  23. SecretKey secretKey = keyFactory.generateSecret(deskey);
  24. // 加密对象
  25. Cipher cipher = Cipher.getInstance("DES");
  26. cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);
  27. // 加密,并把字节数组编码成字符串
  28. encryptedData = new sun.misc.BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
  29. } catch (Exception e) {
  30. throw new RuntimeException("加密错误,错误信息:", e);
  31. }
  32. return encryptedData;
  33. }
  34. /**
  35. * DES解密
  36. *
  37. *
  38. * @param cryptData
  39. * 待解密密文
  40. * @param key
  41. * 校验位
  42. * @return
  43. */
  44. public static String decrypt(String cryptData,String key) {
  45. String decryptedData = null;
  46. try {
  47. // DES算法要求有一个可信任的随机数源
  48. SecureRandom sr = new SecureRandom();
  49. DESKeySpec deskey = new DESKeySpec(key.getBytes());
  50. // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
  51. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  52. SecretKey secretKey = keyFactory.generateSecret(deskey);
  53. // 解密对象
  54. Cipher cipher = Cipher.getInstance("DES");
  55. cipher.init(Cipher.DECRYPT_MODE, secretKey, sr);
  56. // 把字符串解码为字节数组,并解密
  57. decryptedData = new String(cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(cryptData)));
  58. } catch (Exception e) {
  59. throw new RuntimeException("解密错误,错误信息:", e);
  60. }
  61. return decryptedData;
  62. }
  63. public static void main(String[] args) {
  64. System.out.println("url::"+encrypt("jdbc:oracle:thin:@127.0.0.1:1521:xe",KEY));
  65. System.out.println("username::"+encrypt("admin",KEY));
  66. System.out.println("password::"+encrypt("admin",KEY));
  67. }
  68. }

工具类中的main方法执行结果为:

修改properties文件

运行项目测试通过!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约