对称加密算法 PBE
概念
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相关推荐
- java aes pbe_JAVA对称加密算法PBE定义与用法实例分析
本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...
- Java 加密解密之对称加密算法PBE
JAVA 加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) Java 加密 ...
- java aes pbe,JAVA对称加密算法PBE定义与用法实例分析
本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...
- 对称加密算法-PBE算法
一.简述 PBE算法(Password Base Encryption,基于口令加密)算法是一种基于口令的加密算法.特点在于口令由用户自己掌握,采用随机数(我们这里叫做 盐)杂凑多重加密等方法保证数据 ...
- 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 ...
- 对称加密算法之基于口令加密——PBE
PBE算法 1. 算法简述 2.模型分析 3. 代码实现 3.1 算法实现 3.2 测试代码 3.3 运行结果 1. 算法简述 PBE(Password Based Encryption, 基于口令加 ...
- java 对称加密 教程_对称加密算法 之 PBE
PBE算法 结合了消息摘要算法 和 对称加密算法 的优点 PBE(Password Based Encryption) 基于口令加密特点: 1.对已有的算法的包装 2.有 JDK.BC 等实现方式 3 ...
- 对称加密算法---加密学习笔记(三)
基本介绍 对称加密算法是现在应用范围最广,使用频率最高的加密算法. 对称的原因: 加密密钥 = 解密密钥,加密运算是解密运算的逆运算. 对称加密算法是初等的加密算法,从安全性上说,不是很高. 常用的对 ...
- 对称加密算法原理与常用实现
目录 定义 常用对称加密算法 DES 3DES AES PEB 常用对称加密算法的java实现 DES实现 3DES实现 AES实现 PEB实现 定义 原文通过加密秘钥生成密文,密文通过解密秘钥得到原 ...
最新文章
- Leangoo项目管理软件阶段式(瀑布式)游戏产品研发流程
- 竞赛报名 | AI时代数据库交互怎么玩?首届中文NL2SQL挑战赛开战
- 为什么 C++ 中提倡尽量避免使用宏 #define(转)
- 2018百度之星度度熊学队列
- MATLAB错误:‘conv2’
- MORMOT数据库连接池
- php中mysql_connect与mysql_pconnect的区别
- 用VC写Assembly代码(5) --循环的使用(一)
- Facebook入局视频会议,日活用户超3亿的Zoom股价应声下跌,Zoom为何不扛打?
- java 夏令时区_如何获得另一个时区的夏令时状态
- ContestHunter暑假欢乐赛 SRM 03
- mathmagic_MathMagic pro
- Gesture APIs-Furthering Windows Mobile 6.5 Touch Gesture Framework
- 深入浅出Mysql(一)
- vue中引用BScroll监听上拉加载报错
- mysql报警脚本_MySQL Server 报警脚本
- 一款免费、炫酷的GUI:AWTK
- oracle使用小技巧,Oracle在linux下使用小技巧
- Latex表格线宽修改方法以及内容左对齐。
- PS教程:合成复古人物风格海报的技巧
热门文章
- 使用Dism++和360安全卫士搞定Windows10离线升级
- 高速缓冲存储器Cache的映射方式
- 内蒙古专升本考试常见问题汇总
- [NLP] 自然语言处理基础任务介绍
- kimball与onedata建模方法论的区别
- linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点
- python第八章测试题答案_专技天下Python网络爬虫与信息提取第八章单元测试答案...
- 如何 推翻 牛顿三大定律
- KEIL工程目标选项配置
- BLADE:专注的“老虎”