PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。
通过java代码实现如下:
import java.security.Key;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
public abstract class PBECoder extends Coder {
/** *//**
* 支持以下任意一种算法
*
* <pre>
* PBEWithMD5AndDES
* PBEWithMD5AndTripleDES
* PBEWithSHA1AndDESede
* PBEWithSHA1AndRC2_40
* </pre>
*/
public static final String ALGORITHM = "PBEWITHMD5andDES";
/** *//**
* 盐初始化
*
* @return
* @throws Exception
*/
public static byte[] initSalt() throws Exception {
byte[] salt = new byte[8];
Random random = new Random();
random.nextBytes(salt);
return salt;
}
/** *//**
* 转换密钥<br>
*
* @param password
* @return
* @throws Exception
*/
private static Key toKey(String password) throws Exception {
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(keySpec);
return secretKey;
}
/** *//**
* 加密
*
* @param data
* 数据
* @param password
* 密码
* @param salt
* 盐
* @return
* @throws Exception
*/
public static byte[] encrypt(byte[] data, String password, byte[] salt)
throws Exception {
Key key = toKey(password);
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
return cipher.doFinal(data);
}
/** *//**
* 解密
*
* @param data
* 数据
* @param password
* 密码
* @param salt
* 盐
* @return
* @throws Exception
*/
public static byte[] decrypt(byte[] data, String password, byte[] salt)
throws Exception {
Key key = toKey(password);
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
return cipher.doFinal(data);
}
}
再给出一个测试类:
import static org.junit.Assert.*;
import org.junit.Test;
public class PBECoderTest {
@Test
public void test() throws Exception {
String inputStr = "abc";
System.err.println("原文: " + inputStr);
byte[] input = inputStr.getBytes();
String pwd = "efg";
System.err.println("密码: " + pwd);
byte[] salt = PBECoder.initSalt();
byte[] data = PBECoder.encrypt(input, pwd, salt);
System.err.println("加密后: " + PBECoder.encryptBASE64(data));
byte[] output = PBECoder.decrypt(data, pwd, salt);
String outputStr = new String(output);
System.err.println("解密后: " + outputStr);
assertEquals(inputStr, outputStr);
}
}
控制台输出:
原文: abc
密码: efg
加密后: iCZ0uRtaAhE=
解密后: abc
分享到:
相关推荐
本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...
Java使用了传统的PBE算法,而C#则使用了更现代的Rfc2898DeriveBytes,该算法基于PBKDF2(Password-Based Key Derivation Function 2),它提供了更好的安全特性。 总的来说,PBEWithMD5AndDES在Java和C#中都是为了...
2. **生成密钥**:使用`KeyFactory`和指定的PBE算法(如PBEWithMD5AndTripleDES)从`PBEKeySpec`创建密钥。 3. **创建PBE参数规格**:用盐值和迭代次数初始化`PBEParameterSpec`对象。 4. **初始化PBE Cipher**:...
本文将详细介绍Java中常用的几种加密算法,包括但不限于DES、PBE、RSA、DH、DSA和ECC等,并提供部分示例代码以加深理解。 #### 二、基本概念 在深入讨论各种加密算法之前,我们先来了解一些基本的概念: - **加密...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
Java Jct 加密解密工具包源码,WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java... PBETool.java封装同PBE(基于口令的加密)算法有关的方法,可用使用PBE算法加密和解密
PBEUtil.java可能涉及PBE算法,用于加密敏感信息,如用户密码。 8. **RC4**:RC4是一种流式加密算法,对称加密,已被发现有安全漏洞,逐渐被淘汰。RC4Util.java可能是实现RC4算法的工具类。 9. **MD5(Message-...
下面是一个使用PBE算法加密和解密的实例代码: ```java public class ImoocPBE { private static String src = "cakin24 security pbe"; public static void main(String[] args) { jdkPBE(); } public static...
在这个例子中,可能包含了处理加密请求的Servlet方法,比如接收客户端用某种加密算法加密的数据,然后使用对应的解密算法进行解密,确保数据在传输过程中的安全。 文件"DataServer"和"DataServer2"可能包含了实现...
在C++中实现SHA-256加密算法,我们需要了解其基本原理、步骤以及如何在代码中实现。 SHA-256算法的基本流程包括以下步骤: 1. **初始化哈希值**:首先,我们需要设置一组初始的哈希值,这些是固定的常量,由SHA-...
1. **Java Cryptography Extension (JCE)**:JCE是Java平台的标准扩展,提供了强大的加密功能,支持多种加密算法,如AES(高级加密标准)、RSA(公钥加密算法)和DES(数据加密标准)等。 2. **Cipher类**:Cipher...
在给定的“pc1-128-java.zip”压缩包中,我们似乎找到了一个关于Java加密算法的示例或者库,可能涉及到128位的加密强度。"pc1"可能是特定加密算法的简称或者项目名称,而“_java”后缀则表明它是用Java语言实现的。 ...
例如,在上述代码中,`PBECoder`类提供了一个抽象的编码组件,其中定义了`ALGORITHM`常量,表示使用的PBE算法,如"PBEWITHMD5andDES"。`initSalt()`方法生成盐值,`toKey()`方法将密码转换为密钥,`encrypt()`和`...
本资源包涵盖了Java中常见的加密算法和技术,包括基础的哈希算法、对称加密、非对称加密以及证书签名和SSL/TLS协议。下面将详细阐述这些知识点。 1. **哈希算法**:哈希函数可以将任意长度的输入转化为固定长度的...
这个压缩包包含了一些用于加密操作的Java源代码文件,如Base64编码、证书处理、RSA算法、DH算法、ECC算法、DSA算法、DES算法以及PBE(密码本位加密)算法的实现。以下是对这些知识点的详细解释: 1. **Base64编码**...
本文将主要介绍几种常见的加密解密算法,包括DES、PBE、RSA、DH、DSA以及ECC,并提供简单的代码示例。 首先,我们来看基本的单向加密算法。这些算法主要用于生成不可逆的散列值,以验证数据的完整性和一致性。 1. ...
在实际应用部分,书中的源代码部分(Java加密与解密的艺术--源代码.rar)提供了详细的示例,覆盖了SSL/TLS协议的实现,网络通信的安全,以及PBE(Password-Based Encryption)和PKCS#7等标准的使用。这些代码实例...
PBE算法,即基于密码的加密技术,是一种结合了密码和随机数来产生加密密钥的加密方法。这种方式使得加密过程更为安全,因为它依赖于复杂的密码而不是单一的密钥。 非对称加密算法包括RSA、DH和DSA。RSA算法依赖于两...
Java提供了丰富的类库来支持各种加密算法,包括单向加密(哈希函数)和双向加密(对称与非对称加密)。本篇文章将主要介绍几种常见的加密方法:BASE64、MD5、SHA和HMAC。 1. **BASE64**:BASE64是一种编码方式,而...
在Java编程中,加密技术是确保信息安全的关键组成部分。本文将探讨几种常见的加密算法,包括单向加密和对称及非对称加密算法。首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种...