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

bouncycastle(4)Learn from others BPE

    博客分类:
  • JAVA
 
阅读更多
bouncycastle(4)Learn from others BPE

PBE (Password-based Encryption)
A will create password and generate random number, encrypt the data with password and random number. Send the password first to B. Then send the random number and encryption data to B.
B will use password and random number to decrypt the data.

The import implementation class is as follow:
package com.sillycat.easycastle.encryption;

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 {

     /**
      * provide all the algorithm
      * <pre>
      * PBEWithMD5AndDES
      * PBEWithMD5AndTripleDES
      * PBEWithSHA1AndDESede
      * PBEWithSHA1AndRC2_40
      * </pre>
      */
     public static final String ALGORITHM = "PBEWITHMD5andDES";

     /**
      * random salt number
      * @return
      * @throws Exception
      */
     public static byte[] initSalt() throws Exception {
          byte[] salt = new byte[8];
          Random random = new Random();
          random.nextBytes(salt);
          return salt;
     }

     /**
      * convert to the key
      *
      * @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;
     }

     /**
      * encryption
      * @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);
     }

     /**
      * decryption
      *
      * @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);
     }

}


And the test class is as follow:
package com.sillycat.easycastle.encryption;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class PBECoderTest {

     @Test
     public void test() throws Exception {
          String inputStr = "abcdefghijklmn";
          System.out.println("original: " + inputStr);
          byte[] input = inputStr.getBytes();

          String pwd = "password_hello";
          System.out.println("password: " + pwd);

          byte[] salt = PBECoder.initSalt();

          byte[] data = PBECoder.encrypt(input, pwd, salt);

          System.out.println("encryption: " + PBECoder.encryptBASE64(data));

          byte[] output = PBECoder.decrypt(data, pwd, salt);
          String outputStr = new String(output);

          System.out.println("decryption: " + outputStr);
          assertEquals(inputStr, outputStr);
     }

}


This project is also host in project easycastle.

references:
http://snowolf.iteye.com/blog/380761


分享到:
评论

相关推荐

    BouncyCastle依赖.zip

    BouncyCastle是一个强大的Java安全库,它为加密、数字签名、证书处理以及许多其他安全功能提供了全面的支持。在Android开发中,BouncyCastle扮演着重要角色,特别是在处理SSL/TLS连接、加密通信以及生成和验证X.509...

    bouncycastle jar包

    **Bouncy Castle简介** Bouncy Castle是一个开源的Java加密库,提供了广泛的加密算法、协议实现以及相关的工具。这个jar包是专门为Java开发者设计的,它弥补了Java标准加密API(如JCE)在某些功能上的不足,使得...

    BouncyCastle,SM2、SM3、SM4 证书加解密应用例子

    总结来说,"BouncyCastle,SM2、SM3、SM4 证书加解密应用例子"是一个关于使用C#和BouncyCastle库实现中国国密标准的实战案例,适用于需要跨平台、高安全性的应用程序。通过理解和应用这个示例,开发者可以增强在密码...

    BouncyCastle.Crypto.dll

    《BouncyCastle.Crypto.dll:理解.NET平台的加密利器》 在网络安全日益重要的今天,加密技术扮演了至关重要的角色。BouncyCastle库是Java和.NET平台上广泛使用的加密库之一,而"BouncyCastle.Crypto.dll"正是.NET...

    org.bouncycastle 加密算法包 最新1.69版

    ** org.bouncycastle 加密算法包详解 ** `org.bouncycastle` 是一个开源的 Java 库,专门用于实现各种加密算法和相关的安全服务。它提供了广泛的加密功能,包括对称和非对称加密、数字签名、哈希函数、证书管理、...

    BouncyCastle.Crypto

    《BouncyCastle.Crypto:C#中的加密库详解》 在信息安全领域,加密技术是保障数据安全的关键。本文将深入探讨BouncyCastle.Crypto.dll,一个广泛使用的C#加密库,版本1.8.1。BouncyCastle项目,被誉为"The Legion ...

    BouncyCastle.Crypto.dll 版本1.8.6 C#语言

    **BouncyCastle.Crypto.dll** 是一个非常重要的组件,尤其对于使用C#进行加密和解密操作的开发者来说。这个库是BouncyCastle项目的一部分,它是一个开源的密码学API,支持多种加密算法和标准,如RSA、AES、DES、SHA...

    BouncyCastle.Crypto.dll 版本1.8.1

    4. **OpenSSL 兼容性**:BouncyCastle 还可以与OpenSSL API互操作,使得使用OpenSSL编译的密钥可以在.NET环境中无缝使用。 5. **X.509 证书处理**:BouncyCastle 提供了创建、解析和管理X.509证书的功能,这对于...

    BouncyCastle.dll C#依赖工具,用作数据的加解密辅助类

    BouncyCastle.dll 是一个在C#环境中广泛使用的开源加密库,它为.NET Framework提供了一整套强大的加密功能。这个库是基于Bouncy Castle项目,这是一个跨平台的Java和.NET加密库,提供了各种加密算法、密码协议和PKI...

    BouncyCastle.Crypto.rar

    《BouncyCastle.Crypto.dll:理解与应用》 在信息技术领域,加密库是保障数据安全的重要工具,而BouncyCastle.Crypto.dll就是这样一个强大的加密库,尤其在.NET框架下广泛被开发者所使用。BouncyCastle项目,作为一...

    BouncyCastle.Crypto.dll 1.8.2

    4. API改进:为了提供更好的开发者体验,BouncyCastle.Crypto.dll 1.8.2版本可能包含了一些API的改进和调整,使得代码编写更加简洁,易于理解和维护。 四、应用实例 1. 数字证书处理:BouncyCastle.Crypto.dll可以...

    bouncycastle1.59 帮助文档(包含html源文件制作工具)

    《BouncyCastle1.59帮助文档:深入理解与CHM制作详解》 BouncyCastle,作为Java和.NET平台上广泛使用的开源加密库,为开发者提供了丰富的加密算法、密码学标准接口以及证书处理功能。这份“BouncyCastle1.59帮助...

    BouncyCastle.Crypto.dllC#下的BouncyCastle

    BouncyCastle是JAVA专属库,但出来了C#的库。这个非常实用。仅仅一个dll文件

    Bouncy Castle 1.64 API及制作工具

    **Bouncy Castle 1.64 API 深度解析** Bouncy Castle 是一个开源的 Java 安全库,提供了一整套加密算法、证书、SSL/TLS 协议以及 PKCS#7、PKCS#12、OpenSSL、CMS、S/MIME 和 X.509 的实现。在 1.64 版本中,这个库...

    bouncycastle集合包

    4. **bcmail-jdk16-1.46.jar**:这个文件是BouncyCastle的邮件安全组件,用于处理加密和签名的电子邮件。"bcmail"代表BouncyCastle Mail,"jdk16"同理,表示它适用于Java 1.6环境。这个库提供了S/MIME(Secure/...

    C# BouncyCastle实现带原文数据PKCS#7 签名

    本文将详细讲解如何使用C#语言和BouncyCastle库来实现带原文数据的PKCS#7签名。 PKCS#7(Public-Key Cryptography Standards #7)是由RSA Security提出的一种标准,它定义了证书、证书撤销列表(CRL)的格式以及...

    C# BouncyCastle实现带原文数据PKCS#7 签名、验签

    在C#编程环境中,虽然.NET框架提供了内置的安全类如RSACryptoServiceProvider,但在某些场景下,如与Java平台交互或者需要更灵活的加密库时,可能会选择第三方库,例如BouncyCastle。BouncyCastle是一个强大的开源...

Global site tag (gtag.js) - Google Analytics