`

Java加密技术—PBE算法

 
阅读更多

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

通过java代码实现如下:

 
package com.lee.encrypt;

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安全编码组件
 * 
 */
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);

    }
}

 再给出一个测试类:

package com.lee.encrypt; 

 
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
加密后: bKybHcxPmVo=

解密后: abc

 

分享到:
评论

相关推荐

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

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

    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**:虽然通常被认为是编码格式而非加密算法,但在实际应用中,它经常被用于传输...

    java加密技术大全

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

    java加密技术

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

    JAVA加密技术.docx

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

    Java加密技术

    Java加密技术是信息安全领域中的重要组成部分,用于保护数据的隐私和安全。在Java中,有多种加密算法可供选择,如DES、3DES (DESede)、AES、Blowfish、RC2以及RC4等。这些算法都属于对称加密,因为加密和解密使用的...

    Java加密技术(一)

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

    Java加密技术介绍.docx

    ### Java加密技术详解 #### 一、BASE64与单向加密算法MD5&SHA&MAC ##### BASE64 BASE64是一种编码格式,并非真正的加密算法。它主要用于将二进制数据转换成文本格式的数据,以便在网络上传输。由于某些传输协议只...

    JAVA加密和解密的艺术(第二版).zip

    在实际应用部分,书中的源代码部分(Java加密与解密的艺术--源代码.rar)提供了详细的示例,覆盖了SSL/TLS协议的实现,网络通信的安全,以及PBE(Password-Based Encryption)和PKCS#7等标准的使用。这些代码实例...

    Java项目加密技术

    Java项目中的加密技术是保障信息安全的关键手段,涵盖了多种加密解密算法和证书体系。下面将详细介绍这些技术: 1. **基本的单向加密算法**: - **BASE64**:其实是一种编码方式,而非真正的加密算法。它将任意...

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

    总的来说,这个压缩包提供了Java环境下实现多种加密算法的实例,有助于开发者理解并应用这些安全技术。在实际开发中,根据需求选择合适的加密算法,结合DataServlet这样的服务端组件,可以构建起强大的数据安全保障...

    pc1-128-java.zip_Java加密_java 加密_pc1_pc1 java

    Java加密技术是软件开发中的一个重要领域,特别是在保护数据安全、防止代码逆向工程以及网络通信中的数据保密性方面。在给定的“pc1-128-java.zip”压缩包中,我们似乎找到了一个关于Java加密算法的示例或者库,可能...

    ava加密解密 DES PBE RSA DH DSA ECC 等算法

    在Java编程中,加密技术是保护信息安全的关键工具。本文将主要介绍几种常见的加密解密算法,包括DES、PBE、RSA、DH、DSA以及ECC,并提供简单的代码示例。 首先,我们来看基本的单向加密算法。这些算法主要用于生成...

    java 加密

    Java加密技术是软件开发中的重要组成部分,特别是在网络安全和数据保护方面。这个压缩包包含了一些用于加密操作的Java源代码文件,如Base64编码、证书处理、RSA算法、DH算法、ECC算法、DSA算法、DES算法以及PBE...

    Java-Java加密与安全教程

    一、Java加密技术 1. **Java Cryptography Extension (JCE)**:JCE是Java平台的标准扩展,提供了强大的加密功能,支持多种加密算法,如AES(高级加密标准)、RSA(公钥加密算法)和DES(数据加密标准)等。 2. **...

    Java常见加密技术全景展示_附Java代码实现

    Java加密技术涵盖了一系列用于保护数据安全的算法,包括单向加密和双向加密。单向加密,也称为哈希函数,不支持解密过程,主要用于数据校验和完整性验证。Java中常见的单向加密算法有: 1. **BASE64**:并非真正的...

Global site tag (gtag.js) - Google Analytics