概念

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. Leangoo项目管理软件阶段式(瀑布式)游戏产品研发流程
  2. 竞赛报名 | AI时代数据库交互怎么玩?首届中文NL2SQL挑战赛开战
  3. 为什么 C++ 中提倡尽量避免使用宏 #define(转)
  4. 2018百度之星度度熊学队列
  5. MATLAB错误:‘conv2’
  6. MORMOT数据库连接池
  7. php中mysql_connect与mysql_pconnect的区别
  8. 用VC写Assembly代码(5) --循环的使用(一)
  9. Facebook入局视频会议,日活用户超3亿的Zoom股价应声下跌,Zoom为何不扛打?
  10. java 夏令时区_如何获得另一个时区的夏令时状态
  11. ContestHunter暑假欢乐赛 SRM 03
  12. mathmagic_MathMagic pro
  13. Gesture APIs-Furthering Windows Mobile 6.5 Touch Gesture Framework
  14. 深入浅出Mysql(一)
  15. vue中引用BScroll监听上拉加载报错
  16. mysql报警脚本_MySQL Server 报警脚本
  17. 一款免费、炫酷的GUI:AWTK
  18. oracle使用小技巧,Oracle在linux下使用小技巧
  19. Latex表格线宽修改方法以及内容左对齐。
  20. PS教程:合成复古人物风格海报的技巧

热门文章

  1. 使用Dism++和360安全卫士搞定Windows10离线升级
  2. 高速缓冲存储器Cache的映射方式
  3. 内蒙古专升本考试常见问题汇总
  4. [NLP] 自然语言处理基础任务介绍
  5. kimball与onedata建模方法论的区别
  6. linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点
  7. python第八章测试题答案_专技天下Python网络爬虫与信息提取第八章单元测试答案...
  8. 如何 推翻 牛顿三大定律
  9. KEIL工程目标选项配置
  10. BLADE:专注的“老虎”