对称算法--PBE

1.用到的jar包:http://pan.baidu.com/s/1mgIbLvq提取码:ytj9

2.用法

3。代码实现:

package com.tan.sucurity;

import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.asn1.pkcs.PBEParameter;

/**
 * 功能:PEB算法
 * @author TanZi
 * @time 2015年4月25日 上午10:05:40
 */
public class MyPBE {

	public static void main(String[] args) {

		//初始化盐
		SecureRandom random=new SecureRandom();
		byte[] salt=random.generateSeed(8);
		MyPBE myPBE=new MyPBE();
		byte[] result=myPBE.EncryptPBE("tanzi", "nihao",salt);
		System.out.println("加密:"+Base64.encodeBase64String(result));
		result=myPBE.DecryptPBE("tanzi", result,salt);
		System.out.println("解密:"+new String(result));
	}

	/**
	 * 功能:获取一个Key
	 * @param password
	 * @return
	 */
	public Key toKey(String password){
		Key key=null;
		try {
			PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
			key=factory.generateSecret(pbeKeySpec);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return key;
	}
	/**
	 * 功能:解密
	 * @param password 口令
	 * @param result  加密数据
	 * @param salt   盐
	 * @return
	 */
	public byte[] DecryptPBE(String password,byte[] result,byte[] salt){
		try {
			Key key=toKey(password);
			PBEParameterSpec pbeParameterSpec=new PBEParameterSpec(salt, 100);
			Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
			cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
			result=cipher.doFinal(result);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 功能:对数据的加密
	 * @param password 口令
	 * @param src      要加密的数据
	 * @param salt     盐
	 * @return
	 */
	public byte[] EncryptPBE(String password,String src,byte[] salt){

		 byte[] result=null;
		//口令与密钥
		PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
		try {
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
		    Key key=factory.generateSecret(pbeKeySpec);

		    //加密
		    PBEParameterSpec pbeParameterSpec=new PBEParameterSpec(salt, 100);
		    Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
		    cipher.init(Cipher.ENCRYPT_MODE, key,pbeParameterSpec);
		    result=cipher.doFinal(src.getBytes());		   

		} catch (Exception e) {
			e.printStackTrace();
		}
		 return result;

	}
}
时间: 2024-11-05 20:32:47

对称算法--PBE的相关文章

Java加密技术(三)对称加密算法PBE

除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法--PBE PBE  PBE--Password-based encryption(基于密码加密).其特点在于口令由用户自己掌管,不借助任何物理媒体:采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性.是一种简便的加密方式. 通过java代码实现如下: import java.secur

RSA不对称算法,对数据加密解密!

package com.yjm.test509; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; impo

【Java-加密算法】对称加密、非对称加密、单向散列

一提到加密,就会联想到数字签名,这两个经常被混淆的概念到底是什么呢? 加密:加密是一种以密码方式发送信息的方法.只有拥有正确密钥的人才能解开这个信息的密码.对于其他人来说,这个信息看起来就像是一系列随机的字母.数字和符号.如果你要发送不应该让其他人看的敏感信息时,加密是特别重要的. 数字签名:数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证. 加密与数字签名的区别 加密同数字签名

数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)

数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4. 鲍勃收信后,用私钥解密,看到信件内容. 5. 鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest). 6. 然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature). 7. 鲍勃将这个签名,附在信件下面,一起发给苏珊. 8. 苏珊收信后,取下数

对称密钥与非对称密钥算法

对称密钥算法和非对称密钥算法 密码学中两种常见的密码算法为对称密码算法(单钥密码算法)和非对称密码算法(公钥密码算法). 所谓对称密钥算法是指如果一个加密算法的加密密钥和解密密钥相同,或者虽然不相同,但是可由其中的任意一个很容易的推导出另一个,即密钥是双方共享的. 非对称密钥算法是指一个加密算法的加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥.这两个密钥其中一个称为公钥,用于加密,是公开的,另一个称为私钥,用于解密,是保密的.其中由公钥计算私钥是计算上不可行的. 这两种密

公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个: 加密--公钥解密--私钥签名--私钥验证--公钥 看了这个也许会对私钥用于签名不解,其实它等同于用私钥加密,而公钥验证就是用公钥解密,但是不能用于保密信息.因为公钥是公开的. 再来一个: 1)公钥和私钥成对出现2)公开的密钥叫公钥,只有自己知道的叫私钥3)用公钥加密的数据只有对应的私钥可以 解密4)用私钥加密的数据只有对应的公钥可以解密5)如果可以用公钥解密,则必然是对应的私钥加的密6)如果可以用私钥解密,则 必然是对应的公钥

8.Java 加解密技术系列之 PBE

Java 加解密技术系列之 PBE 序 概念 原理 代码实现 结束语 序 前 边的几篇文章,已经讲了几个对称加密的算法了,今天这篇文章再介绍最后一种对称加密算法 — — PBE,这种加密算法,对我的认知来说,并没有 DES.3DES.AES 那么流行,也不尽然,其实是我之前并没有这方面的需求,当然接触他的机会也就很少了,因此,可想而知,没听过显然在正常不过了. 概念 PBE,全称为“Password Base Encryption”,中文名“基于口令加密”,是一种基于密码的加密算法,其特点是使用

【转】两种非对称算法原理:RSA和DH

转自:http://blog.chinaunix.net/uid-7550780-id-2611984.html 两种非对称算法原理:RSA和DH 虽然对称算法的效率高,但是密钥的传输需要另外的信道.非对称算法RSA和DH可以解决密钥的传输问题(当然,它们的作用不限于此).这两个算法的名字都是来自于算法作者的缩写,希望有朝一日能够出现用中国人命名的加密算法.非对称算法的根本原理就是单向函数,f(a)=b,但是用b很难得到a. RSA算法 RSA算法是基于大数难于分解的原理.不但可以用于认证,也可

对称加密和非对称加密

1.对称加密----密钥加密    DES    IDEA    AES特点:算法公开,计算量小,加密速度快,加密效率高,不足:不安全原理:在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥.2.不对称加密----公钥和私钥    RSA    DSA原理:收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥.由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密