`
buerkai
  • 浏览: 170267 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

PBE 对称加密

    博客分类:
  • Bug
 
阅读更多
package com.test.security;

import java.io.ByteArrayOutputStream;
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;

/****
* DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR),PBE等多种对称加密方式
* 其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。

* @author Administrator
*
*/
public class PBEUtil {
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);

}
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
// if (n < b.length - 1)
// hs = hs + ":";
}
return hs.toUpperCase();
}
/**
* Deformat byte string to byte array.
*
* @param s
* @return
*/
public static byte[] hex2byte(String s) {
byte[] src = s.toLowerCase().getBytes();
byte[] ret = new byte[src.length / 2];
for (int i = 0; i < src.length; i += 2) {
byte hi = src[i];
byte low = src[i + 1];
hi = (byte) ((hi >= 'a' && hi <= 'f') ? 0x0a + (hi - 'a')
: hi - '0');
low = (byte) ((low >= 'a' && low <= 'f') ? 0x0a + (low - 'a')
: low - '0');
ret[i / 2] = (byte) (hi << 4 | low);
}
return ret;
}
/**
* HEX编码 将形如0x12 0x2A 0x01 转换为122A01
*
* @param data
* @return
*/
public static String hexEncode(byte[] data) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < data.length; i++) {
String tmp = Integer.toHexString(data[i] & 0xff);
if (tmp.length() < 2) {
buffer.append('0');
}
buffer.append(tmp);
}
String retStr = buffer.toString().toUpperCase();
return retStr;
}

/**
* HEX解码 将形如122A01 转换为0x12 0x2A 0x01
*
* @param data
* @return
*/
public static byte[] hexDecode(String data) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
for (int i = 0; i < data.length(); i += 2) {
String onebyte = data.substring(i, i + 2);
int b = Integer.parseInt(onebyte, 16) & 0xff;
out.write(b);
}
return out.toByteArray();
}

public static void main(String[] a) {
     try {
byte [] salt=PBEUtil.initSalt();
byte[] out=PBEUtil.encrypt("asdfasdf就是点击付款".getBytes("UTF-8"), "12366", salt);
System.out.println(byte2hex(out));
byte [] aa=PBEUtil.decrypt(out, "12366", salt);
System.out.println(new String(aa,"UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
    
}

}
转载请注明出处:http://buerkai.iteye.com

分享到:
评论

相关推荐

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

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

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

    在Java中,Password-Based Encryption(PBE)是对称加密的一种特殊形式,它基于密码来生成加密密钥,增强了安全性。PBE的主要优点是它允许用户使用易记的密码,而不是复杂的随机密钥,从而简化了密钥管理和用户交互...

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

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

    java与C#的PBE加密

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

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

    - **非对称加密**:使用一对公钥和私钥,其中公钥用于加密,私钥用于解密。 - **哈希函数**:是一种单向加密技术,用于生成固定长度的摘要,常用于数据完整性检查。 #### 三、Java中的加密技术 ##### 3.1 单向加密...

    对称加密代码

    对称加密代码 对称加密代码 对称加密代码 对称加密代码 对称加密代码

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

    对称加密(如AES、DES、3DES、Blowfish)适用于大量数据的快速加密,而非对称加密(如RSA、DH)更适合小量数据的安全传输或密钥交换。哈希算法(如MD5)则用于数据完整性检查。理解并正确使用这些加密算法,对于保护...

    OpenSSL对称加密算法中如何添加新算法

    OpenSSL 对称加密算法中如何添加新算法 OpenSSL 是一个开源的加密算法库,它提供了对称加密算法、非对称加密算法、哈希算法等多种加密算法。OpenSSL 的对称加密算法中可以添加新算法,以满足不同的加密需求。下面...

    密码管理系统 - Springboot + Mybatis,实现了AES、DES、PBE三种对称加密算法

    该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理...

    Android基于密码的加密(PBE)实现。.zip

    接着,使用`javax.crypto.Cipher`进行加密和解密操作,选择如AES(Advanced Encryption Standard)这样的对称加密算法,并指定PBE算法,如`PBEWithMD5AndTripleDES`、`PBEWithSHA1AndDESede`或者更现代的`...

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

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

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

    例如,`java.security.MessageDigest`用于SHA和HMAC计算,`javax.crypto.Cipher`处理DES、AES、RSA等加密解密,`java.security.KeyPairGenerator`和`java.security.Signature`则用于非对称加密和数字签名。...

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

    WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java封装同Blowfish对称加密算法有关的方法,包括了使用创建Blowfish密码,使用Blowfish加密、解密, 使用PBE(基于口令的...

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

    接下来,我们将探讨对称加密和非对称加密算法。 1. **DES(Data Encryption Standard)**:是一种古老的对称加密算法,使用56位密钥。由于安全性较低,现在已被AES(Advanced Encryption Standard)所取代。在Java...

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

    首先,DES(Data Encryption Standard)是一种对称加密算法,使用56位的密钥对数据进行加密和解密。虽然它的安全性相比现代标准较低,但作为历史上的经典算法,理解其工作原理有助于理解其他加密算法。 AES...

    JavaSecurity:java 摘要算法,对称加密,非对称加密算法

    Java Security提供了DES(Data Encryption Standard),AES(Advanced Encryption Standard)和PBE(Password-Based Encryption)等对称加密算法。DES已相对较老,现在通常使用更安全的AES,它支持128、192和256位的...

    Java加密技术

    PBE(基于密码的加密)是另一种对称加密方式,它的特点是用户自己掌握口令,无需依赖任何物理媒介。PBE采用了随机数(称为盐)来增强安全性,通过多次加密增加破解的难度。在Java中实现PBE时,通常会结合杂凑函数和...

    漫谈Java加密技术.docx

    对称加密中,DES是一种老式的加密算法,已被AES取代,PBE是基于密码的加密,适合于存储用户密码。非对称加密则包括RSA公钥加密算法,基于数学难题的 Diffie-Hellman 密钥交换协议,以及用于数字签名的DSA算法。非...

    Java加密与解密的艺术配书源代码

    文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 ...

Global site tag (gtag.js) - Google Analytics