读书人

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

发布时间: 2012-10-20 14:12:48 作者: rapoo

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

      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();??????????}????????}????}?

读书人网 >编程

热点推荐