Bouncy Castle Crypto是一个Java实现的加密包,同时也有C#版本。它包含一套轻量级的API可以在包括J2ME在内的绝大多数环境中运行。部分手机不支持JSR177也可使用该加密包实现加密功能。Bouncy Castle加密包包含了大多数流行的加密实现(如:AES、DES、Blowfish等)、散列算法(如:MD5、SHA等)、字节字符编码(如:Base64)等。
下面一个段测试代码(包括MD5,Base64以及AES加密):
public void test() {
String clearText = "Hello World!";
String password = "hi";
//md5
MD5Digest digest = new MD5Digest();
digest.update(password.getBytes(), 0, password.length());
int md5Num = digest.getByteLength();
byte[] md5Buf = new byte[md5Num];
digest.doFinal(md5Buf, 0);
//base64
byte[] base64Buf = Base64.encode(md5Buf);
byte[] key = new byte[16];//设置key长度为128位
System.arraycopy(base64Buf, 0, key, 0, 16);
//AES加密
byte[] cipherBuf = null;
cipherBuf = AESEncode(clearText.getBytes(), key);
//AES解密
String decryptText = AESDecode(cipherBuf, key);
System.out.println("md5:" + new String(md5Buf));
System.out.println("base64:" + new String(base64Buf));
System.out.println("key:" + new String(key));
System.out.println("cipher:" + new String(cipherBuf));
System.out.println("clear:" + decryptText);
}
Base64编码后的字符串是由a~z,A~Z,+,/这64个字符组合而成,末尾补齐用“=”号表示。
AES加密算法对key的长度有限制,它只支持128,192和256位的key。所以代码中接key设置成16个字节。
下面是AES加密的代码:
public byte[] AESEncode(byte[] clearText, byte[] key) {
byte[] rv = null;
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine());
cipher.init(true, new KeyParameter(key));
rv = new byte[cipher.getOutputSize(clearText.length)];
int oLen = cipher.processBytes(clearText, 0, clearText.length, rv, 0);
try {
cipher.doFinal(rv, oLen);
} catch (DataLengthException e) {
} catch (IllegalStateException e) {
} catch (InvalidCipherTextException e) {
}
return rv;
}
下面是AES解密的代码:
public String AESDecode(byte[] cipherText, byte[] key) {
byte[] rv = null;
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine());
cipher.init(false, new KeyParameter(key));
rv = new byte[cipher.getOutputSize(cipherText.length)]; //该大小会大于实际的大小
int oLen = cipher.processBytes(cipherText, 0, cipherText.length, rv, 0);
try
{
cipher.doFinal(rv, oLen);
} catch (DataLengthException e) {
} catch (IllegalStateException e) {
} catch (InvalidCipherTextException e) {
}
return new String(rv).trim();
}
代码中rv的初始化长度会大于实际解密后数据的长度,所以生成的String要去掉空格。
Bouncy Castle官网:http://www.bouncycastle.org/
JavaTM Cryptography Extension (JCE) 参考指南:
http://download.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html
分享到:
相关推荐
org.bouncycastle 加密算法包,csdn上很多这个包的下载都不全,我这完整包里包含了9个jar包 1.69官网最新版本
BouncyCastle 加密算法.net组件 版本10.0
非常棒的第三方开源组件:Bouncy Castle 加密开源组件 Java Release 1.46。推荐大家使用哈~~~
org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包org.bouncycastle--j2me加密包
bouncycastle包,为加密提供支持
非常棒的第三方开源组件:Bouncy Castle 加密开源组件API Java Release 1.46.推荐大家使用哈~~~~
C# BouncyCastle.Crypto.dll用于SM4、SM2加密
RSA加密 Java钥转C#用到. 格式转换要用到一个开源加密库Bouncy Castle Crypto APIs
bouncycastle的加密软件包开发 (Bouncy Castle Crypto package) 是加密算法的一个JAVA实现
C#项目,可以直接运行,根据BouncyCastle,sm3、sm4,ECB、CBC加密解密
java借助bouncycastle库实现ECC双向加密解密算法Utils工具包。
C# 基于BouncyCastle.Crypto 1.8.10 实现国密算法,SM2,SM3,SM4(加签解签,加密解密)
主要用于加解密,我是在使用解密SM4 时接触到的,在网上代码引用了Org.BouncyCastle.Utilities.Encoders,找不到库 自己在网上找了好久找到了,没有积分的可以去http://www.bouncycastle.org/csharp/ 下载
只能设置5分,提取BouncyCastle的精华,所有文件只有13个,纯代码实现。去除了BouncyCastle库的调用。请下载的兄弟们希望给个5分。提取精华不易费时费力。
Bouncy Castle Crypto.dll是一个C#实现的加密包。一款加解密的工具类,可以在C#程序中添加依赖项。
bouncycastle.jar bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供JCE 1.2.1的实现。
java加密解密研究2、Bouncy Castle和Commons Codec加密组件 java加密解密研究2、Bouncy Castle和Commons Codec加密组件
Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.CXF中的ws安全可能需要使用。 org.bouncycastle
这里包含了java加密常用的jar吧,Commons Codec与Bouncy Castle,其中加密不仅包含了base64加密md加密,还包含了对称加密和非对称加密,不仅有jar包还有源码