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
分享到:
相关推荐
**Bouncy Castle 加密开源组件API Java Release 1.46** 是一个广泛使用的加密库,尤其在Java开发中占据重要地位。Bouncy Castle 提供了丰富的加密算法、密钥生成器、证书处理以及PKI(Public Key Infrastructure,...
总结来说,`org.bouncycastle` 是一个功能强大的 Java 加密库,为开发者提供了全面的加密算法实现和安全服务。最新1.69版的发布,意味着这个库已经包含了最新的安全补丁和性能优化,确保了开发者可以构建出安全、...
**开源加密库Bouncy Castle Crypto APIs详解** Bouncy Castle Crypto APIs是一个广泛使用的开源加密库,主要为Java和.NET平台提供全面的加密功能。这个库包含了众多的加密算法、模式和协议,包括RSA加密,它是非...
BouncyCastle是一个强大的Java安全库,它为加密、数字签名、证书处理以及许多其他安全功能提供了全面的支持。在Android开发中,BouncyCastle扮演着重要角色,特别是在处理SSL/TLS连接、加密通信以及生成和验证X.509...
- **添加依赖**:在Java项目中,需要将`bouncycastle.jar`添加到项目的类路径中,通常可以通过Maven或Gradle的依赖管理来实现。 - **初始化提供者**:为了使用Bouncy Castle提供的服务,需要在Java安全配置中注册...
Bouncy Castle是一个开源的Java加密库,提供了广泛的加密算法、协议实现以及相关的工具。这个jar包是专门为Java开发者设计的,它弥补了Java标准加密API(如JCE)在某些功能上的不足,使得开发者可以更加灵活地处理...
bouncycastle的加密软件包开发 (Bouncy Castle Crypto package) 是加密算法的一个JAVA实现
Bouncy Castle是一个知名的开源加密库,特别为Java和.NET平台设计。这个组件提供了广泛的加密算法、协议和实用工具,使得开发者能够轻松地在他们的应用程序中实现安全的加密功能。Java Release 1.46是Bouncy Castle...
BouncyCastle,作为Java和.NET平台上广泛使用的开源加密库,为开发者提供了丰富的加密算法、密码学标准接口以及证书处理功能。这份“BouncyCastle1.59帮助文档”是针对该版本的详尽指南,包含了完整的API参考和使用...
《BouncyCastle.Crypto:C#中的加密库详解》 在信息安全领域,加密技术是保障数据安全的关键。本文将深入探讨BouncyCastle.Crypto.dll,一个广泛使用的C#加密库,版本1.8.1。BouncyCastle项目,被誉为"The Legion ...
BouncyCastle.Crypto 1.8.1动态库dll是.NET平台上一个重要的加密库,为开发者提供了广泛且强大的密码学功能。这个版本是相对最新的,对于寻求最新安全更新和功能改进的开发人员来说尤其重要。在本文中,我们将详细...
在C#编程环境中,虽然.NET框架提供了内置的安全类如RSACryptoServiceProvider,但在某些场景下,如与Java平台交互或者需要更灵活的加密库时,可能会选择第三方库,例如BouncyCastle。BouncyCastle是一个强大的开源...
`org.bouncycastle`库是一个强大的开源加密库,为Java开发者提供了丰富的安全功能,包括加密算法、密码学标准实现以及X.509证书处理等。这个完整的资源包涵盖了所有必要的组件,是开发人员在进行安全编程时的重要...
BouncyCastle.Crypto.dll 是一个专门用于加密和解密操作的动态链接库,适用于C#编程语言。这个版本1.8.6是在2020年2月21日发布,是BouncyCastle库的最新迭代,为开发者提供了强大的安全功能。 BouncyCastle库本身是...
BouncyCastle库是Java和.NET平台上广泛使用的加密库之一,而"BouncyCastle.Crypto.dll"正是.NET环境中实现该库的核心组件。本文将深入探讨BouncyCastle.Crypto.dll的功能、特点以及其在.NET开发中的应用。 Bouncy...
在信息技术领域,加密库是保障数据安全的重要工具,而BouncyCastle.Crypto.dll就是这样一个强大的加密库,尤其在.NET框架下广泛被开发者所使用。BouncyCastle项目,作为一个开源的Java和.NET加密API,提供了丰富的...
import org.bouncycastle.jce.provider.BouncyCastleProvider; // 添加Bouncy Castle Provider Security.addProvider(new BouncyCastleProvider()); // 生成密钥对 KeyPairGenerator keyGen = ...