最近感觉没有什么要写的,因为太空虚…可能是因为刚进入一份工作,哪哪的都不适应,也可能因为团队中都是大佬,压力山大…但是还是要不断努力!!

这两天项目中要做一些数据加密处理,发现一种之前没有用过的算法PBEWITHMD5andDES,只是简单了解,方便复习,简述一下.

PBE(Password Based Encryption,基于口令加密)算法是一种基于口令的加密算法,其特点在于口令是由用户自己掌握的,采用随机数杂凑多重加密等方法保证数据的安全性, PBE算法没有密钥的概念,密钥在其它对称加密算法中是经过算法计算得出来的,PBE算法则是使用口令替代了密钥。

就是PBE作者说的,PBE并没有真正的构建加密/解密算法,是对加密/加密算法的一种封装,让其更具安全性.

下面在代码中介绍PBEWITHMD5andDES的应用和具体概念

/*** 定义使用的算法为:PBEWITHMD5andDES算法*/public static final String ALGORITHM = "PBEWITHMD5ANDDES";/*** 定义迭代次数为1000次,次数越多,运算越大,越不容易破解之类。*/private static final int ITERATIONCOUNT = 100;//orgin 1000private  String saltStr;/*** 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节的倍数** @return byte[] 盐值* */private  byte[] getSalt() throws Exception {// 实例化安全随机数  // 产出盐SecureRandom random = new SecureRandom();return random.generateSeed(8);}/*** 根据PBE密码生成一把密钥** @param password*            生成密钥时所使用的密码* @return Key PBE算法密钥* */private  Key getPBEKey(String password) throws Exception {// 实例化使用的算法SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);// 设置PBE密钥参数PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());// 生成密钥SecretKey secretKey = keyFactory.generateSecret(keySpec);return secretKey;}/*** 加密明文字符串** @param plaintext*            待加密的明文字符串* @param password*            生成密钥时所使用的密码* @return 加密后的密文字符串* @throws Exception*/public  String encrypt(String plaintext, String password)throws Exception {//获取根据PBE口令生成的keyKey key = getPBEKey(password);//获取8字节位的盐byte[] salt = getSalt();//将盐进行加密saltStr = Base64.encodeBase64String(salt);//设置PBE参数的盐和运算次数PBEParameterSpec parameterSpec = new PBEParameterSpec(salt,ITERATIONCOUNT);//构建实例化Cipher cipher = Cipher.getInstance(ALGORITHM);//cipher对象使用之前还需要初始化,共三个参数("加密模式或者解密模式","密匙","向量")cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);//数据转换byte encipheredData[] = cipher.doFinal(plaintext.getBytes("UTF-8"));return Base64.encodeBase64String(encipheredData);}public String getSaltStr(){return saltStr;}/*** 解密密文字符串** @param ciphertext*            待解密的密文字符串* @param password*            生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致)* @param saltStr*            盐值(如需解密,该参数需要与加密时使用的一致)* @return 解密后的明文字符串* @throws Exception*/public  String decrypt(String ciphertext, String password, String saltStr)throws Exception {//转换密钥Key key = getPBEKey(password);//解密盐byte[] salt = Base64.decodeBase64(saltStr);//实例化PBE参数PBEParameterSpec parameterSpec = new PBEParameterSpec(salt,ITERATIONCOUNT);//实例化Cipher cipher = Cipher.getInstance(ALGORITHM);//初始化cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec);//数据转换byte[] passDec = cipher.doFinal(Base64.decodeBase64(ciphertext));//返回明文字符return new String(passDec);}

在我的观点看来,PBE使用了一种安全的加密方式,使用口令代替密钥,每次在一方发送口令,双方确认口令之后进行交互.交互中口令发送方会把salt加密并将加密的密文发送,另外一方就可以直接进行解密.口令和salt缺一不可.

PBE加密算法:PBEWITHMD5andDES相关推荐

  1. Java加解密(六)基于口令(PBE)加密

    目录 基于口令(PBE)加密 1 定义 2 加密过程 3 解密过程 5 PBE加密算法会话密钥保存 4 使用场景 5 JDK支持的PBE加密算法 6 Bouncy Castle 支持的PBE加密算法 ...

  2. 实战:隐藏SpringBoot中的私密数据!

    这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这个我是比较有感触的, ...

  3. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这个我是比较有感触的, ...

  4. JAVA加密--JCA、JCE、CSP概念、体系架构与使用示例

    1 概念 JCA: Java密码体系结构 Java Cryptography Architecture JCE(Java Cryptography Extension),在早期JDK版本中,由于受美国 ...

  5. springboot整合Jasypt对数据库密码进行加密

    Jasypt 的特点 1.高安全性.基于标准的加密技术,适用于单向和双向加密.加密密码.文本.数字.二进制文件 2.适合集成到基于 Spring 的应用程序中 3.用于加密应用程序(即数据源)配置的集 ...

  6. SpringBoot数据脱敏

    苏三说技术 2023-03-05 10:41 发表于四川 以下文章来源于程序员小富 ,作者程序员内点事 程序员小富. 大厂技术民工一枚,学技术.搞钱不扯没用的~ java突击队 技术经验分享 公众号 ...

  7. Java 安全编程加密了解2

    Java 安全编程 1.1 J2SE 的主要工具 基本工具: javac    Java 编程语言的编译器.本书各章的程序都是在 DOS 窗口中通过执行 "javac 文件名 " ...

  8. Springboot之Jasypt配置文件加密/解密

    Jasypt配置文件加密/机密 一.Jasypt介绍 二.Springboot整合Jasypt 2.1 环境配置 2.2 添加依赖 2.3 添加Jasypt配置 2.4 编写加/解密工具类 2.5 修 ...

  9. 基础框架搭建 springboot3.1.0+mybatisplus3.5.3+swagger3(springdoc)+log4j2+jdk17+jasypt

    1.引入pom.xml <properties><!--JDK版本--><java.version>17</java.version><!--sp ...

最新文章

  1. xp 5gt ***
  2. 网页显示UIWebView(一个)
  3. 【转】iOS的APP资源,开源的哦
  4. datatable中某一列最小值_Asp.net中获取DataTable选择第一行某一列值
  5. LIB和DLL的区别与使用
  6. 【Kafka】Kafka 2.6新功能:消费者主动触发Rebalance
  7. 95-190-452-源码-window-Trigger-ContinuousEventTimeTrigger
  8. android主题资源,使用 Theme Editor 设计应用主题背景
  9. 选择排序java代码_JAVA简单选择排序算法原理及实现
  10. DSP双线性变换详解
  11. 关于凸包算法和叉积的应用
  12. 基于python的-使用正则表达式验证手机号
  13. BiShop 模式识别与机器学习
  14. ed是什么梗_美国大学EA,ED什么意思?
  15. IDEA 出现错误:找不到或无法加载主类
  16. iOS 第三方 汇总
  17. 塔望 · ​食业​研究 |食品品牌能从植物奶第一股OATLY破圈中学到什么
  18. 2021年12月青少年C/C++软件编程(四级)等级考试试卷及答案解析
  19. Python编程从入门到实践 第一部分基础知识 代码合集
  20. 一款APP,秒杀50+视频平台VIP!

热门文章

  1. linux系统声卡安装教程,SUSE LINUX 10.2声卡驱动的安装方法
  2. NFV网络云落地过程中若干问题分析
  3. linux移动当前文件夹下的前几个文件到其他文件夹下
  4. 本人打算11月份到深圳找开发方面的工作,请各位大虾给些意见
  5. #榜样的力量#天玑数据大脑疫情风险感知预警平台“智疫通”丨数据猿新冠战“疫”公益策划...
  6. mysql事务隔离级别及实现原理
  7. 24节气-芒种 || 一分耕耘,一分收获。
  8. 计算机控制技术课程综述,胡计算机控制技术课程综述.doc
  9. 分析当下关注度最高的电视节目之一,过往39届央视春晚的数据
  10. 心理测试html,最惊人的十个心理测试 超准的心里测试题