`

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

    博客分类:
  • java
 
阅读更多
<转>http://snowolf.iteye.com/blog/380761
PBE
    PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。


package org.nick.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安全编码组件 
 * @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);  
  
    }  
}  

import java.math.BigInteger;
import org.nick.encrypt.Coder;
import org.nick.encrypt.DESCoder;
import org.nick.encrypt.PBECoder;
public class Test
{
    public static void main(String[] str) throws Exception {  
    	String inputStr = "PBEWITHMD5andDES";  
        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);  
  
    }  
}

原文: PBEWITHMD5andDES
密码: efg
加密后: uaHJ83fFo1lbfSvX4oBD5BdJMsM+Mq+F
解密后: PBEWITHMD5andDES
  • 大小: 24.8 KB
分享到:
评论

相关推荐

    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 二。...

    snowolf-Java 加密技术

    本文将深入探讨Java中常见的加密技术,包括基础的单向加密算法、对称加密、非对称加密以及数字证书等相关概念。 1. **单向加密算法** - **BASE64**:它是一种用于在网络上传输二进制数据的编码方式,将8位字节转换...

    java加密技术大全

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

    java加密技术

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

    JAVA加密技术.docx

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

    Java加密技术

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

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

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

    Java加密技术(一)

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

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

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

    漫谈Java加密技术.docx

    Java加密技术涵盖了一系列用于保护数据安全的算法,包括编码格式、单向加密、对称加密以及非对称加密。在本文中,我们将深入探讨几种常见的加密方法:BASE64、MD5、SHA和HMAC。 首先,BASE64是一种编码方式,而非...

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

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

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

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

    Java加密技术全集

    Java加密技术涵盖了各种加密算法,包括单向加密和双向加密,以及数字证书的使用。本文主要探讨了Java中实现的一些基础加密方法,如BASE64、MD5、SHA和HMAC。 1. BASE64编码:BASE64并不是一种加密算法,而是一种...

    Java加密技术介绍.docx

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

Global site tag (gtag.js) - Google Analytics