`

Java加密技术(三)——PBE算法

阅读更多
Javapbe对称加密
    除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE

PBE
    PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。



通过java代码实现如下:Coder类见 Java加密技术(一)
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; 
 
/**
* PBE安全编码组件

* @author 梁栋
* @version 1.0
* @since 1.0
*/ 
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); 
 
    } 



再给出一个测试类:
Java代码  收藏代码
import static org.junit.Assert.*; 
 
import org.junit.Test; 
 
/**

* @author 梁栋
* @version 1.0
* @since 1.0
*/ 
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); 
    } 
 



控制台输出:
Console代码  收藏代码
原文: abc 
密码: efg 
加密后: iCZ0uRtaAhE= 
 
解密后: abc 

    后续我们会介绍非对称加密算法,如RSA、DSA、DH、ECC等。
分享到:
评论

相关推荐

    java多种加密解密算法:SHA算法,HMAC算法,DES算法,PBE算法,AES算法,RSA算法,数字签名,D-H算法

    本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...

    java 文件加密解密 DES PBE RSA DH DSA ECC 等算法代码

    #### 三、Java中的加密技术 ##### 3.1 单向加密算法 这些算法主要用于数据完整性验证,它们的特点是加密过程不可逆。 - **BASE64**:虽然通常被认为是编码格式而非加密算法,但在实际应用中,它经常被用于传输...

    对称加密算法PBE(Java).rar

    对称加密算法是一种常见的数据加密技术,它使用相同的密钥进行加密和解密。在Java中,Password-Based Encryption(PBE)是对称加密的一种特殊形式,它基于密码来生成加密密钥,增强了安全性。PBE的主要优点是它允许...

    java与C#的PBE加密

    **Java与C#的PBE加密** PBE(Password-Based Encryption)基于密码的加密是一种常见的加密方式,它结合了密钥派生函数(PBKDF)和对称加密算法,如DES(Data Encryption Standard),用于保护数据的安全。在Java和...

    PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;

    PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...

    java加密算法:Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法

    java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...

    java加密技术大全

    Java加密技术是保护数据安全的重要工具,广泛应用于网络通信、数据存储、数字签名等领域。本资源包涵盖了Java中常见的加密算法和技术,包括基础的哈希算法、对称加密、非对称加密以及证书签名和SSL/TLS协议。下面将...

    java加密技术

    Java加密技术是Java编程语言中用于保障数据安全的一系列加密方法和技术,它包括了单向加密算法、对称加密算法、非对称加密算法以及加密算法的高级应用如数字签名和数字证书等。本文将详细介绍这些加密技术,并结合...

    JAVA加密技术.docx

    在Java编程中,加密技术是确保信息安全的关键组成部分。本文将探讨几种常见的加密算法,包括单向加密和对称及非对称加密算法。首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种...

    Java加密技术

    总的来说,Java加密技术提供了丰富的加密选项,PBE则提供了一种基于用户密码的简便加密方式,适合在各种场景下保护敏感数据。然而,使用加密技术时,必须时刻关注算法的安全性和最新安全实践,确保数据的长期安全性...

    Java加密技术(一)

    总之,Java加密技术提供了丰富的工具和算法,可以帮助开发者构建安全的应用程序。然而,随着技术的发展,加密算法的安全性也需要不断更新,以抵御新的攻击手段。在设计系统时,应考虑最新的安全标准和最佳实践,确保...

    [JAVA加解密]DES,AES,PBE,DH,RSA,ElGamal等算法实现及DataServlet实例

    本文将深入探讨几种常见的加密算法——DES、AES、PBE、DH、RSA以及ElGamal,并结合DataServlet实例来阐述如何在实际应用中使用这些算法。 首先,DES(Data Encryption Standard)是一种对称加密算法,使用56位的...

    JAVA对称加密算法PBE定义与用法实例分析

    JAVA对称加密算法PBE定义与用法实例分析 JAVA对称加密算法PBE(Password Based Encryption,即基于口令加密)是一种常用的加密算法,它通过将口令转换为密钥,然后使用该密钥对数据进行加密。PBE算法优点在于可以...

    Java十大加密算法(对称与非对称)

    Java作为一种广泛使用的开发语言,提供了丰富的加密库来支持各种加密算法。以下将详细介绍标题和描述中提到的Java加密算法,并结合给定的文件名,讨论具体实现。 1. **AES(Advanced Encryption Standard)**:高级...

    Java Jct 加密解密工具包源码.rar

    Java Jct 加密解密工具包源码,WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java... PBETool.java封装同PBE(基于口令的加密)算法有关的方法,可用使用PBE算法加密和解密

    PBE——Password-based encryption(基于密码加密)

    PBE(Password-Based Encryption,基于密码加密)是一种对称加密技术,它的主要特点是利用用户提供的密码作为加密和解密的密钥。与传统的对称加密算法(如DES、3DES、AES、Blowfish、RC2和RC4)相比,PBE在安全性上...

    Java加密技术介绍.docx

    ### Java加密技术详解 ...通过这些章节的介绍,我们可以看到Java加密技术的广度和深度,涵盖了从简单的编码格式到复杂的非对称加密算法。这些技术不仅对于软件开发至关重要,也是现代互联网安全的基础。

Global site tag (gtag.js) - Google Analytics