Bouncy Castle Crypto APIs 是一个开源的轻量级Java 加密解密包,实现了JCE/JCA的provider,支持AES等多种加密解密算法。
详情请见主页:http://www.bouncycastle.org/java.html
本文的示例代码使用了http://www.bouncycastle.org/download/bcprov-jdk16-139.jar
1)使用JCE的AES-128-CBC加密解密
- package com.albertsong.aes;
-
- import java.security.Key;
- import java.security.Security;
-
- import javax.crypto.Cipher;
- import javax.crypto.spec.IvParameterSpec;
- import javax.crypto.spec.SecretKeySpec;
-
- import org.bouncycastle.jce.provider.BouncyCastleProvider;
- import org.bouncycastle.util.encoders.Hex;
-
- /**
- * @author Albert
- * @version 1.0
- *
- */
- public class AESWithJCE {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- byte[] keybytes = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 };
- byte[] iv = { 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38,
- 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31 };
- String content ="TEST1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- System.out.println("Original content:");
- System.out.println(content);
- try {
- Security.addProvider(new BouncyCastleProvider());
- Key key = new SecretKeySpec(keybytes, "AES");
- Cipher in = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
- in.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
- byte[] enc = in.doFinal(content.getBytes());
- System.out.println("Encrypted Content:");
- System.out.println(new String(Hex.encode(enc)));
-
- Cipher out = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
- out.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
- byte[] dec = out.doFinal(enc);
- System.out.println("Decrypted Content:");
- System.out.println(new String(dec));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
-
- }
-
- }
2)不使用JCE的AES-128-CBC加密解密,可以用于J2ME程序中。
- package com.albertsong.aes;
-
- import org.bouncycastle.crypto.BufferedBlockCipher;
- import org.bouncycastle.crypto.engines.AESFastEngine;
- import org.bouncycastle.crypto.modes.CBCBlockCipher;
- import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
- import org.bouncycastle.crypto.params.KeyParameter;
- import org.bouncycastle.crypto.params.ParametersWithIV;
- import org.bouncycastle.util.encoders.Hex;
-
- /**
- * @author Albert
- * @version 1.0
- *
- */
- public class AESWithoutJCE {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- byte[] keybytes = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
- 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 };
- byte[] iv = { 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38,
- 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31 };
- String content ="TEST1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- System.out.println("Original content:");
- System.out.println(content);
- try {
- BufferedBlockCipher engine = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
- engine.init(true, new ParametersWithIV(new KeyParameter(keybytes),iv));
- byte[] enc = new byte[engine.getOutputSize(content.getBytes().length)];
- int size1 = engine.processBytes(content.getBytes(), 0, content.getBytes().length, enc, 0);
- int size2 = engine.doFinal(enc, size1);
- System.out.println("size2 ="+size2);
- byte[] encryptedContent =new byte[size1+size2];
- System.arraycopy(enc, 0, encryptedContent, 0, encryptedContent.length);
- System.out.println("Encrypted Content:");
- System.out.println(new String(Hex.encode(encryptedContent)));
-
-
- engine.init(false, new ParametersWithIV(new KeyParameter(keybytes),iv));
- byte[] dec = new byte[engine.getOutputSize(encryptedContent.length)];
- size1 = engine.processBytes(encryptedContent, 0, encryptedContent.length, dec, 0);
- size2 = engine.doFinal(dec, size1);
- System.out.println("size2 ="+size2);
- byte[] decryptedContent =new byte[size1+size2];
- System.arraycopy(dec, 0, decryptedContent, 0, decryptedContent.length);
- System.out.println("Decrypted Content:");
- System.out.println(new String(decryptedContent));
-
- } catch (Exception ex) {
- ex.printStackTrace();
- }
-
- }
-
- }
分享到:
相关推荐
AES 资料 用Bouncy Castle实现AES-128-CBC加密解密 bcprov-jdk15-145.jar bcprov-jdk16-145.jar
org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
java借助bouncycastle库实现ECC双向加密解密算法Utils工具包。
C# 基于BouncyCastle.Crypto 1.8.10 实现国密算法,SM2,SM3,SM4(加签解签,加密解密)
这是一个品类齐全的bouncycastle--jar文件包,其中有x509、09、jce、crypto、util、tls等等
Maven坐标:org.bouncycastle:bcpkix-jdk15on:1.68; 标签:jdk15on、bouncycastle、bcpkix、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
Maven坐标:org.bouncycastle:bcprov-jdk15on:1.59; 标签:bouncycastle、bcprov、jdk15on、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
bcprov-ext-jdk15to18-1.73 bcprov-jdk15to18-1.73
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
标签:jdk15on、bouncycastle、bcpkix、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
C#项目,可以直接运行,根据BouncyCastle,sm3、sm4,ECB、CBC加密解密
Maven坐标:org.bouncycastle:bcpkix-jdk15on:1.60; 标签:jdk15on、bouncycastle、bcpkix、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
使用C# 版本 BouncyCastle 包 ,实现带原文数据PKCS#7 签名。 此版本请不要下载,只包含签名部分。
Maven坐标:org.bouncycastle:bcpkix-jdk15on:1.58; 标签:bouncycastle、bcpkix、jdk15on、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
c# AES加密与解密,RSA加密与解密,BouncyCastle.Crypto加密与解密,适用于接口的加密与解密
org.bouncycastle csdn上有 bcprov-jdk15to18-1.72.jar ,但没有 bcprov-ext-jdk15to18-1.72.jar 特此上传,免费下载
bcmail-jdk14-1.38.jar bcpkix-jdk15on-1.68.jar bcpkix-jdk15on-1.68-javadoc.jar bcpkix-jdk15on-1.68-sources.jar bcprov-jdk14-1.38.jar bcprov-jdk15on-1.69.jar bcprov-jdk15to18-1.69.jar ...