用Bouncy Castle实现AES-128-CBC加密解密

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加密解密

Java代码  收藏代码
  1. package  com.albertsong.aes;  
  2.   
  3. import  java.security.Key;  
  4. import  java.security.Security;  
  5.   
  6. import  javax.crypto.Cipher;  
  7. import  javax.crypto.spec.IvParameterSpec;  
  8. import  javax.crypto.spec.SecretKeySpec;  
  9.   
  10. import  org.bouncycastle.jce.provider.BouncyCastleProvider;  
  11. import  org.bouncycastle.util.encoders.Hex;  
  12.   
  13. /**  
  14.  * @author Albert  
  15.  * @version 1.0  
  16.  *   
  17.  */   
  18. public   class  AESWithJCE {  
  19.   
  20.     /**  
  21.      * @param args  
  22.      */   
  23.     public   static   void  main(String[] args) {  
  24.         byte [] keybytes = {  0x31 ,  0x32 ,  0x33 ,  0x34 ,  0x35 ,  0x36 ,  0x37 ,  0x38 ,  
  25.                 0x31 ,  0x32 ,  0x33 ,  0x34 ,  0x35 ,  0x36 ,  0x37 ,  0x38  };  
  26.         byte [] iv = {  0x38 ,  0x37 ,  0x36 ,  0x35 ,  0x34 ,  0x33 ,  0x32 ,  0x31 ,  0x38 ,  
  27.                 0x37 ,  0x36 ,  0x35 ,  0x34 ,  0x33 ,  0x32 ,  0x31  };  
  28.         String content ="TEST1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;  
  29.         System.out.println("Original content:" );  
  30.         System.out.println(content);  
  31.         try  {  
  32.             Security.addProvider(new  BouncyCastleProvider());  
  33.             Key key = new  SecretKeySpec(keybytes,  "AES" );  
  34.             Cipher in = Cipher.getInstance("AES/CBC/PKCS7Padding" , "BC" );  
  35.             in.init(Cipher.ENCRYPT_MODE, key, new  IvParameterSpec(iv));  
  36.             byte [] enc = in.doFinal(content.getBytes());  
  37.             System.out.println("Encrypted Content:" );  
  38.             System.out.println(new  String(Hex.encode(enc)));  
  39.               
  40.             Cipher out = Cipher.getInstance("AES/CBC/PKCS7Padding" ,  "BC" );  
  41.             out.init(Cipher.DECRYPT_MODE, key, new  IvParameterSpec(iv));  
  42.             byte [] dec = out.doFinal(enc);  
  43.             System.out.println("Decrypted Content:" );  
  44.             System.out.println(new  String(dec));  
  45.         } catch  (Exception ex) {  
  46.             ex.printStackTrace();  
  47.         }  
  48.   
  49.     }  
  50.   
  51. }  

 2)不使用JCE的AES-128-CBC加密解密,可以用于J2ME程序中。

Java代码  收藏代码
  1. package  com.albertsong.aes;  
  2.   
  3. import  org.bouncycastle.crypto.BufferedBlockCipher;  
  4. import  org.bouncycastle.crypto.engines.AESFastEngine;  
  5. import  org.bouncycastle.crypto.modes.CBCBlockCipher;  
  6. import  org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;  
  7. import  org.bouncycastle.crypto.params.KeyParameter;  
  8. import  org.bouncycastle.crypto.params.ParametersWithIV;  
  9. import  org.bouncycastle.util.encoders.Hex;  
  10.   
  11. /**  
  12.  * @author Albert  
  13.  * @version 1.0  
  14.  *  
  15.  */   
  16. public   class  AESWithoutJCE {  
  17.   
  18.     /**  
  19.      * @param args  
  20.      */   
  21.     public   static   void  main(String[] args) {  
  22.         byte [] keybytes = {  0x31 ,  0x32 ,  0x33 ,  0x34 ,  0x35 ,  0x36 ,  0x37 ,  0x38 ,  
  23.                 0x31 ,  0x32 ,  0x33 ,  0x34 ,  0x35 ,  0x36 ,  0x37 ,  0x38  };  
  24.         byte [] iv = {  0x38 ,  0x37 ,  0x36 ,  0x35 ,  0x34 ,  0x33 ,  0x32 ,  0x31 ,  0x38 ,  
  25.                 0x37 ,  0x36 ,  0x35 ,  0x34 ,  0x33 ,  0x32 ,  0x31  };  
  26.         String content ="TEST1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;  
  27.         System.out.println("Original content:" );  
  28.         System.out.println(content);  
  29.         try  {  
  30.             BufferedBlockCipher engine = new  PaddedBufferedBlockCipher( new  CBCBlockCipher( new  AESFastEngine()));  
  31.             engine.init(true ,  new  ParametersWithIV( new  KeyParameter(keybytes),iv));  
  32.             byte [] enc =  new   byte [engine.getOutputSize(content.getBytes().length)];  
  33.             int  size1 = engine.processBytes(content.getBytes(),  0 , content.getBytes().length, enc,  0 );  
  34.             int  size2 = engine.doFinal(enc, size1);  
  35.             System.out.println("size2 =" +size2);  
  36.             byte [] encryptedContent = new   byte [size1+size2];  
  37.             System.arraycopy(enc, 0 , encryptedContent,  0 , encryptedContent.length);  
  38.             System.out.println("Encrypted Content:" );  
  39.             System.out.println(new  String(Hex.encode(encryptedContent)));  
  40.               
  41.               
  42.             engine.init(false ,  new  ParametersWithIV( new  KeyParameter(keybytes),iv));  
  43.             byte [] dec =  new   byte [engine.getOutputSize(encryptedContent.length)];  
  44.             size1 = engine.processBytes(encryptedContent, 0 , encryptedContent.length, dec,  0 );  
  45.             size2 = engine.doFinal(dec, size1);  
  46.             System.out.println("size2 =" +size2);  
  47.             byte [] decryptedContent = new   byte [size1+size2];  
  48.             System.arraycopy(dec, 0 , decryptedContent,  0 , decryptedContent.length);  
  49.             System.out.println("Decrypted Content:" );  
  50.             System.out.println(new  String(decryptedContent));  
  51.   
  52.         } catch  (Exception ex) {  
  53.             ex.printStackTrace();  
  54.         }  
  55.   
  56.     }  
  57.   
  58. } 
Bouncy Castle Java性能优化与安全最佳实践:10个关键技巧 在Java应用开发中,加密解密、数字签名等安全操作是保障数据机密性与完整性的基石。其核心原理依赖于密码学算法,通过Java密码体系结构(JCA)提供的标准接口与算法实现。这些技术的价值在于为金融交易、身份认证、通信加密等场景构建可信的安全屏障。然而,不当的实现会引入性能瓶颈与安全漏洞。本文聚焦于广泛使用的Bouncy Castle加密库,针对**性能优化**与**安全最佳实践**两大核心诉求,系统性地阐述了从Provider初始化、对象池化、算法选型到内存管理的10个关键工程技巧。这些实践旨在帮助开发者在高 阅读详情

相关推荐

Android备份解密实战:集成Bouncy Castle增强ABE兼容性

在移动应用数据迁移与取证场景中,Android备份文件(.ab格式)的加密解密是关键技术环节。其核心加密原理基于AES-256算法与PBKDF2密钥派生机制,通过密码学算法保障数据安全。从技术价值看,稳定的解密工具能有效支持数据恢复、设备迁移等实际需求。然而,标准Java加密扩展(JCE)在不同运行环境下存在兼容性差异,可能导致解密失败。为此,集成Bouncy Castle加密库成为提升工具鲁棒性的关键方案——它提供统一的算法实现,解除JRE策略限制,确保跨环境稳定运行。本文聚焦Android-backup

weixin_34234721的博客 306

使用 bouncycastle实现 AES

[code="java"] import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; impo...

iteye_14264的博客 1722

Java加密开发实战:Bouncy Castle集成指南与国密算法应用

Java Cryptography Architecture (JCA) 是Java平台的标准密码学框架,它通过Provider机制为加密、解密、签名等操作提供统一的API。其核心原理在于允许开发者动态插入不同的算法实现,从而在保持接口一致性的前提下,扩展JDK原生未支持的加密算法。这一机制的技术价值在于实现了密码学组件的可插拔与标准化,使得企业能够灵活应对合规性要求与安全升级。在实际应用场景中,金融、政务等领域常需使用国密算法(如SM2、SM4),而JDK标准库对此支持有限,此时引入Bouncy Cast

weixin_33910137的博客 366

Java 运用 Bouncy Castle 进行 AES128 加密解密(CBC 模式 PKCS7 填充 )

参考了 http://my.oschina.net/nicsun/blog/95632 的博文,在此表示感谢 一个有加密内容的 iOS 项目有了跨平台的需求,需要用 Java 实现与  ios  端通用的AES128 的加密解密。AES 的 Java 实现网上有很多例子,问题在于iOS端已经使用了 APPLE 官方例子中的 SecKeyWrapper 类进行加密解密,所以

u013078295的博客 8140

Java加密测试实战:Bouncy Castle核心测试用例设计与最佳实践

在Java加密开发中,单元测试是确保代码安全性与可靠性的基石。加密算法的核心原理在于通过特定数学变换实现数据的机密性、完整性与认证,其技术价值直接关系到系统安全防线。无论是金融交易、身份认证还是数据存储,加密技术都是底层关键支撑。本文聚焦于广泛使用的Bouncy Castle加密库,深入探讨如何针对**对称加密**、**非对称加密与签名**、哈希算法及国密算法等场景,设计有效的测试用例。内容涵盖测试框架选型、环境搭建、参数化测试应用以及常见异常排查,旨在帮助开发者构建坚实的加密代码质量保障体系,确保算法实现

weixin_34037515的博客 418

Bouncy Castle加密测试实战:JUnit5+AssertJ框架与多维度验证策略

在Java安全开发中,单元测试是确保加密算法正确性与安全性的基石。其核心原理在于通过自动化验证,保障代码在算法实现、参数配置与异常处理等维度的可靠性。对于广泛使用的Bouncy Castle加密库,有效的测试能显著提升代码质量,防止因密钥管理、填充模式或初始化向量配置错误导致的安全漏洞。在实际应用场景中,结合JUnit 5的参数化测试功能与AssertJ的流式断言,可以系统性地构建覆盖基础功能、算法组合、边界条件及互操作性的测试矩阵。本文聚焦于Bouncy Castle的测试实践,详细阐述了如何针对AES、

weixin_33871366的博客 377

使用Bouncy Castle进行高级加密实践

Bouncy Castle是一个开源的Java加密库,提供了大量的加密算法、协议和工具。它支持从基本的对称加密到复杂的非对称加密,以及数字签名和密钥协商协议。Bouncy Castle不仅适用于Java标准版(JSE),还支持Java微版(JME)和Android平台。Bouncy Castle是一个功能强大的Java加密库,提供了丰富的加密算法和协议支持。通过本文的示例代码,你可以学习如何使用Bouncy Castle进行对称加密、非对称加密、数字签名和密钥协商。

weixin_53840353的博客 3556

Java加密实战:Bouncy Castle算法库核心原理与应用指南

在Java开发中,加密技术是保障数据安全的核心基础,广泛应用于用户密码存储、支付接口通信等场景。Java Cryptography Architecture(JCA)提供了标准加密框架,但在实际应用中,开发者常面临算法支持有限、特定标准兼容性不足等挑战。Bouncy Castle作为开源的加密算法库,通过扩展JCA算法支持范围和提供底层API,有效解决了这些问题。其技术价值在于无缝集成国密SM2/SM3/SM4等算法,并支持更精细的证书操作。在工程实践中,Bouncy Castle适用于金融支付、图书管理系

weixin_33863087的博客 312

用Bouncy Castle实现AES_128_CBC在j2se和j2me上的加密解密

Bouncy Castle Crypto APIs 是一个开源的轻量级Java 加密解密包,实现了JCE/JCA的provider,支持AES等多种加密解密算法。 详情请见主页:http://www.bouncycastle.org/java.html 本文的示例代码使用了h

kbest的专栏 3345

Java加密解密实战指南:从AES、RSA到国密SM4与Bcrypt

加密技术是保障数据机密性、完整性与认证性的核心基石,其原理主要分为对称加密、非对称加密与哈希函数三大体系。对称加密如AES,加解密使用同一密钥,效率高,适合海量数据;非对称加密如RSA,通过公钥私钥配对解决密钥分发难题;哈希函数如SHA-256则提供单向数据指纹。在工程实践中,Java通过JCA/JCE架构提供标准密码学服务,并常借助Bouncy Castle等扩展库支持国密等算法。其技术价值在于为系统构建可靠的安全防线,广泛应用于数据存储加密、网络传输安全(如SSL/TLS)、密码安全存储及数字签名等场景

weixin_30535843的博客 436

aes解密需要的BouncyCastleProvider

应用场景如,微信小程序获取用户详细信息需要aes解密,这个时候就需要这个jar包

AES加密示例

AES加密非对称加密,加密和解密使用相同的密钥

ch_endong的博客 771

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

用Bouncy Castle实现AES-128-CBC加密解密(转)

Bouncy Castle Crypto APIs 是一个开源的轻量级Java 加密解密包,实现了JCE/JCA的provider,支持AES等多种加密解密算法。详情请见主页:http://www.bouncycastle.org/java.html本文的示例代码使用了http://www.bouncycastle.org/download/bcprov-jdk16-139.jar1)使用JCE的...

无量天尊 416

创建可视化机房

(3)窗户位置创建好以后需要对窗户的墙面镂空位置进行修补,具体操作为,选中镂空位置的顶点(这里必须是选择一个平面的顶点,不要跨平面选择),实际操作如下图:选择点以后,鼠标右键,选择【从顶点创建边/面】,或者按F键,随后对其他镂空位置进行相同操作;(2)将【物体模式】修改为【编辑模式】,选中-x对应面的所有顶点,移动顶点位置,其他放小调整按照同理,找到选中对应面的所有顶点,移动位置即可;调整动画事件轴上的线,选中关键帧的时间,调整模型的位置或者旋转角度,具体根据插入关键帧菜单选择的项进行模型的相关调整。

SmileBu丿㦌的博客 2072

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

安卓支持AES 256加密解密

第一步,网上大部分都是让你 覆盖2个jar ,我弄了,但是没看出效果 我是java1.8版本的,下载地址是: https://www.oracle.com/java/technologies/javase-jce8-downloads.html 覆盖到安装jdk的目录 C:\Program Files\Java\jdk1.8.0_251\jre\lib\security\policy\unlimited C:\Program Files\Java\jdk1.8.0_251\jre\lib\se..

谢伟光的博客 2053

手把手教学:利用AutoDL与vLLM快速部署DeepSeek-R1大模型实战指南

本文详细介绍了如何利用AutoDL平台和vLLM框架快速部署DeepSeek-R1大模型的实战指南。从服务器配置、vLLM安装优化到模型部署的两种方案,再到性能调优和生产环境建议,手把手教你高效完成大模型部署。特别针对国内开发者遇到的网络问题提供了稳定解决方案,并分享了显存优化、磁盘清理等实用技巧。

weixin_42531779的博客 330
上一篇: javassist:增强型的java反射工具,获取方法参数名,获取方法参数标注值
下一篇: java web读取属性文件的几种方式总结
programloverjack
博客等级 码龄17年 5粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值