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