概念

PBE算法(Password Based Encryption基于口令加密)是一种基于口令的加密算法,其特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数杂凑多重加密等方法保证数据的安全性。

加密过程

PBE算法在加密过程中并不是直接使用口令来加密,而是加密的密钥由口令生成,这个功能由PBE算法中的KDF函数完成。KDF函数的实现过程为:将用户输入的口令首先通过“盐”(salt)的扰乱产生准密钥,再将准密钥经过散列函数多次迭代后生成最终加密密钥,密钥生成后,PBE算法再选用对称加密算法对数据进行加密,可以选择DES、3DES、RC5等对称加密算法 。

java jdk 实现

PbeUtils.java

package crypto.pbe;import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.SecureRandom;/*** 对称加密 PBE算法 java实现*/
public class PbeUtils {/*** @link {https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#Algorithms}*/private static final String ALGORITHM = "PBEWITHMD5andDES";/*** 获取随机的8字节长的盐值*/public static byte[] getSalt() {return getSalt(8);}/*** 获取随机的 numBytes 字节长的盐值** @param numBytes 盐值的字节长度*/public static byte[] getSalt(int numBytes) {SecureRandom random = new SecureRandom();byte[] salt = random.generateSeed(numBytes);return salt;}/*** @param password 口令*/private static SecretKey getKey(String password) throws Exception {PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());SecretKeyFactory factory = SecretKeyFactory.getInstance(ALGORITHM);SecretKey secretKey = factory.generateSecret(pbeKeySpec);return secretKey;}public static byte[] encrypt(String password, byte[] data) throws Exception {return encrypt(password, new byte[]{0, 0, 0, 0, 0, 0, 0, 0}, 100, data);}/*** 加密** @param password       口令* @param salt           盐值* @param data           需要加密的数据* @param iterationCount 迭代次数*/public static byte[] encrypt(String password, byte[] salt, int iterationCount, byte[] data) throws Exception {PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, iterationCount);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, getKey(password), pbeParameterSpec);byte[] bytes = cipher.doFinal(data);return bytes;}public static byte[] decrypt(String password, byte[] data) throws Exception {return decrypt(password, new byte[]{0, 0, 0, 0, 0, 0, 0, 0}, 100, data);}/*** 解密** @param password       口令* @param salt           盐值* @param data           需要解密的数据* @param iterationCount 迭代次数*/public static byte[] decrypt(String password, byte[] salt, int iterationCount, byte[] data) throws Exception {PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, iterationCount);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, getKey(password), pbeParameterSpec);return cipher.doFinal(data);}}
package crypto.pbe;import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;public class PbeUtilsTest {public static void main(String[] args) throws Exception {String text = "世界人民大团结万岁";byte[] salt = PbeUtils.getSalt();System.out.println("盐值:" + Hex.encodeHexString(salt));String password = "123456";// 口令int iterationCount = 10;byte[] encryptBytes = PbeUtils.encrypt(password, salt, iterationCount, text.getBytes());System.out.println("密文:" + Base64.encodeBase64String(encryptBytes));byte[] result = PbeUtils.decrypt(password, salt, iterationCount, encryptBytes);System.out.println("解密:" + new String(result));}
}

code

对称加密算法 PBE相关推荐

  1. java aes pbe_JAVA对称加密算法PBE定义与用法实例分析

    本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...

  2. Java 加密解密之对称加密算法PBE

    JAVA  加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) Java 加密 ...

  3. java aes pbe,JAVA对称加密算法PBE定义与用法实例分析

    本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...

  4. 对称加密算法-PBE算法

    一.简述 PBE算法(Password Base Encryption,基于口令加密)算法是一种基于口令的加密算法.特点在于口令由用户自己掌握,采用随机数(我们这里叫做 盐)杂凑多重加密等方法保证数据 ...

  5. JAVA加密解密→术语、密码分类、OSI与TCP/IP安全体系、Base64、消息摘要算法MD/SHA/MAC、对称加密算法DES/AES/PBE、非对称加密算法DH/RSA/EIGamaI

    术语 密码分类 OSI与TCP/IP安全体系 JAVA安全 Base64算法 消息摘要算法MD 消息摘要算法MD图解 消息摘要算法SHA 消息摘要算法SHA图解 消息摘要算法MAC 消息摘要算法MAC ...

  6. 对称加密算法之基于口令加密——PBE

    PBE算法 1. 算法简述 2.模型分析 3. 代码实现 3.1 算法实现 3.2 测试代码 3.3 运行结果 1. 算法简述 PBE(Password Based Encryption, 基于口令加 ...

  7. java 对称加密 教程_对称加密算法 之 PBE

    PBE算法 结合了消息摘要算法 和 对称加密算法 的优点 PBE(Password Based Encryption) 基于口令加密特点: 1.对已有的算法的包装 2.有 JDK.BC 等实现方式 3 ...

  8. 对称加密算法---加密学习笔记(三)

    基本介绍 对称加密算法是现在应用范围最广,使用频率最高的加密算法. 对称的原因: 加密密钥 = 解密密钥,加密运算是解密运算的逆运算. 对称加密算法是初等的加密算法,从安全性上说,不是很高. 常用的对 ...

  9. 对称加密算法原理与常用实现

    目录 定义 常用对称加密算法 DES 3DES AES PEB 常用对称加密算法的java实现 DES实现 3DES实现 AES实现 PEB实现 定义 原文通过加密秘钥生成密文,密文通过解密秘钥得到原 ...

最新文章

  1. Linux环境变量的设置和查看方法
  2. Telnet不是内部或外部命令解决办法
  3. 对C语言 结构体 和 结构变量
  4. android异步任务详解 AsynTask[转 杨瓦瓦]
  5. Python学习笔记:访问数据库
  6. 计算机录取高考生过程,解密高考录取过程:人机结合 打造“阳光高招”
  7. 黑客借“甲型流感”传毒 挂马疾病预防控制中心网站
  8. QuickSort 优化后的快速排序算法
  9. 关于socket组播和ssdp(一)[修改1.2]
  10. Github 用户喊话微软:放弃 ICE 吧,不然会失去我们的
  11. jquery 源码分析
  12. 求解线性方程的数值方法——Matlab中实现算法
  13. 数字转换成英语的程序(c++实现)
  14. 花1分钟用Word手动绘制流程图,看完我学会了!
  15. 堪比巨著:饿了么交易系统5年演化血泪史
  16. Bagging和Boosting(偏差与方差)
  17. JavaScript:鼠标拖曳效果
  18. dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少(示例代码)...
  19. 大数据技术怎么学习,需要具备什么基础?简单说一下
  20. 基于机器学习算法对电动汽车续驶里程进行估计

热门文章

  1. 程序员写代码,为什么推荐首选这款笔记本电脑?
  2. R语言中使用boxplot函数绘制箱线图
  3. Visual C++游戏编程基础之追逐移动
  4. 读书笔记-程序员的职业素养
  5. SpaceVim自动补全coc:最强自动补全插件
  6. 访问时ssl证书错误
  7. 利用 ChatGPT 解决某些网站文章不允许复制粘贴的限制
  8. python以垂直方式输出hello world_Python之Hello World的条件输出实例
  9. 20170307 只要吃东西咬坏了嘴唇,就停不下来
  10. 自媒体运营是做什么的?有什么工具?