`
yingfang05
  • 浏览: 122754 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Java的PBE算法加密

阅读更多
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算法

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

    java与C#的PBE加密

    Java使用了传统的PBE算法,而C#则使用了更现代的Rfc2898DeriveBytes,该算法基于PBKDF2(Password-Based Key Derivation Function 2),它提供了更好的安全特性。 总的来说,PBEWithMD5AndDES在Java和C#中都是为了...

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

    2. **生成密钥**:使用`KeyFactory`和指定的PBE算法(如PBEWithMD5AndTripleDES)从`PBEKeySpec`创建密钥。 3. **创建PBE参数规格**:用盐值和迭代次数初始化`PBEParameterSpec`对象。 4. **初始化PBE Cipher**:...

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

    本文将详细介绍Java中常用的几种加密算法,包括但不限于DES、PBE、RSA、DH、DSA和ECC等,并提供部分示例代码以加深理解。 #### 二、基本概念 在深入讨论各种加密算法之前,我们先来了解一些基本的概念: - **加密...

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

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

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

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

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

    PBEUtil.java可能涉及PBE算法,用于加密敏感信息,如用户密码。 8. **RC4**:RC4是一种流式加密算法,对称加密,已被发现有安全漏洞,逐渐被淘汰。RC4Util.java可能是实现RC4算法的工具类。 9. **MD5(Message-...

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

    下面是一个使用PBE算法加密和解密的实例代码: ```java public class ImoocPBE { private static String src = "cakin24 security pbe"; public static void main(String[] args) { jdkPBE(); } public static...

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

    在这个例子中,可能包含了处理加密请求的Servlet方法,比如接收客户端用某种加密算法加密的数据,然后使用对应的解密算法进行解密,确保数据在传输过程中的安全。 文件"DataServer"和"DataServer2"可能包含了实现...

    C++实现对数据的SHA-256加密算法

    在C++中实现SHA-256加密算法,我们需要了解其基本原理、步骤以及如何在代码中实现。 SHA-256算法的基本流程包括以下步骤: 1. **初始化哈希值**:首先,我们需要设置一组初始的哈希值,这些是固定的常量,由SHA-...

    Java-Java加密与安全教程

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

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

    在给定的“pc1-128-java.zip”压缩包中,我们似乎找到了一个关于Java加密算法的示例或者库,可能涉及到128位的加密强度。"pc1"可能是特定加密算法的简称或者项目名称,而“_java”后缀则表明它是用Java语言实现的。 ...

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

    例如,在上述代码中,`PBECoder`类提供了一个抽象的编码组件,其中定义了`ALGORITHM`常量,表示使用的PBE算法,如"PBEWITHMD5andDES"。`initSalt()`方法生成盐值,`toKey()`方法将密码转换为密钥,`encrypt()`和`...

    java加密技术大全

    本资源包涵盖了Java中常见的加密算法和技术,包括基础的哈希算法、对称加密、非对称加密以及证书签名和SSL/TLS协议。下面将详细阐述这些知识点。 1. **哈希算法**:哈希函数可以将任意长度的输入转化为固定长度的...

    java 加密

    这个压缩包包含了一些用于加密操作的Java源代码文件,如Base64编码、证书处理、RSA算法、DH算法、ECC算法、DSA算法、DES算法以及PBE(密码本位加密)算法的实现。以下是对这些知识点的详细解释: 1. **Base64编码**...

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

    本文将主要介绍几种常见的加密解密算法,包括DES、PBE、RSA、DH、DSA以及ECC,并提供简单的代码示例。 首先,我们来看基本的单向加密算法。这些算法主要用于生成不可逆的散列值,以验证数据的完整性和一致性。 1. ...

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

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

    java加密技术

    PBE算法,即基于密码的加密技术,是一种结合了密码和随机数来产生加密密钥的加密方法。这种方式使得加密过程更为安全,因为它依赖于复杂的密码而不是单一的密钥。 非对称加密算法包括RSA、DH和DSA。RSA算法依赖于两...

    Java加密技术(一)

    Java提供了丰富的类库来支持各种加密算法,包括单向加密(哈希函数)和双向加密(对称与非对称加密)。本篇文章将主要介绍几种常见的加密方法:BASE64、MD5、SHA和HMAC。 1. **BASE64**:BASE64是一种编码方式,而...

    JAVA加密技术.docx

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

Global site tag (gtag.js) - Google Analytics