`

Bouncy Castle加密库简介

阅读更多
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

    **Bouncy Castle 加密开源组件API Java Release 1.46** 是一个广泛使用的加密库,尤其在Java开发中占据重要地位。Bouncy Castle 提供了丰富的加密算法、密钥生成器、证书处理以及PKI(Public Key Infrastructure,...

    org.bouncycastle 加密算法包 最新1.69版

    总结来说,`org.bouncycastle` 是一个功能强大的 Java 加密库,为开发者提供了全面的加密算法实现和安全服务。最新1.69版的发布,意味着这个库已经包含了最新的安全补丁和性能优化,确保了开发者可以构建出安全、...

    开源加密库Bouncy Castle Crypto APIs (RSA加密)

    **开源加密库Bouncy Castle Crypto APIs详解** Bouncy Castle Crypto APIs是一个广泛使用的开源加密库,主要为Java和.NET平台提供全面的加密功能。这个库包含了众多的加密算法、模式和协议,包括RSA加密,它是非...

    bouncycastle 加密工具包

    - **添加依赖**:在Java项目中,需要将`bouncycastle.jar`添加到项目的类路径中,通常可以通过Maven或Gradle的依赖管理来实现。 - **初始化提供者**:为了使用Bouncy Castle提供的服务,需要在Java安全配置中注册...

    BouncyCastle依赖.zip

    BouncyCastle是一个强大的Java安全库,它为加密、数字签名、证书处理以及许多其他安全功能提供了全面的支持。在Android开发中,BouncyCastle扮演着重要角色,特别是在处理SSL/TLS连接、加密通信以及生成和验证X.509...

    bouncycastle jar包

    Bouncy Castle是一个开源的Java加密库,提供了广泛的加密算法、协议实现以及相关的工具。这个jar包是专门为Java开发者设计的,它弥补了Java标准加密API(如JCE)在某些功能上的不足,使得开发者可以更加灵活地处理...

    bouncycastle的加密软件包开发文档

    bouncycastle的加密软件包开发 (Bouncy Castle Crypto package) 是加密算法的一个JAVA实现

    Bouncy Castle 加密开源组件 Java Release 1.46

    Bouncy Castle是一个知名的开源加密库,特别为Java和.NET平台设计。这个组件提供了广泛的加密算法、协议和实用工具,使得开发者能够轻松地在他们的应用程序中实现安全的加密功能。Java Release 1.46是Bouncy Castle...

    bouncycastle1.59 帮助文档(包含html源文件制作工具)

    BouncyCastle,作为Java和.NET平台上广泛使用的开源加密库,为开发者提供了丰富的加密算法、密码学标准接口以及证书处理功能。这份“BouncyCastle1.59帮助文档”是针对该版本的详尽指南,包含了完整的API参考和使用...

    org.bouncycastle完整资源包

    `org.bouncycastle`库是一个强大的开源加密库,为Java开发者提供了丰富的安全功能,包括加密算法、密码学标准实现以及X.509证书处理等。这个完整的资源包涵盖了所有必要的组件,是开发人员在进行安全编程时的重要...

    C# BouncyCastle实现带原文数据PKCS#7 签名、验签

    在C#编程环境中,虽然.NET框架提供了内置的安全类如RSACryptoServiceProvider,但在某些场景下,如与Java平台交互或者需要更灵活的加密库时,可能会选择第三方库,例如BouncyCastle。BouncyCastle是一个强大的开源...

    BouncyCastle.Crypto.dll 版本1.8.6 C#语言

    BouncyCastle.Crypto.dll 是一个专门用于加密和解密操作的动态链接库,适用于C#编程语言。这个版本1.8.6是在2020年2月21日发布,是BouncyCastle库的最新迭代,为开发者提供了强大的安全功能。 BouncyCastle库本身是...

    BouncyCastle.Crypto.dll

    BouncyCastle库是Java和.NET平台上广泛使用的加密库之一,而"BouncyCastle.Crypto.dll"正是.NET环境中实现该库的核心组件。本文将深入探讨BouncyCastle.Crypto.dll的功能、特点以及其在.NET开发中的应用。 Bouncy...

    BouncyCastle.dll C#依赖工具,用作数据的加解密辅助类

    BouncyCastle.dll 是一个在C#环境中广泛使用的开源加密库,它为.NET Framework提供了一整套强大的加密功能。这个库是基于Bouncy Castle项目,这是一个跨平台的Java和.NET加密库,提供了各种加密算法、密码协议和PKI...

    java使用bouncycastle实现椭圆曲线(ECC)双向加密解密

    import org.bouncycastle.jce.provider.BouncyCastleProvider; // 添加Bouncy Castle Provider Security.addProvider(new BouncyCastleProvider()); // 生成密钥对 KeyPairGenerator keyGen = ...

    BouncyCastle.Crypto 1.8.1动态库dll

    BouncyCastle.Crypto 1.8.1动态库dll是.NET平台上一个重要的加密库,为开发者提供了广泛且强大的密码学功能。这个版本是相对最新的,对于寻求最新安全更新和功能改进的开发人员来说尤其重要。在本文中,我们将详细...

    BouncyCastle.Crypto.rar

    在信息技术领域,加密库是保障数据安全的重要工具,而BouncyCastle.Crypto.dll就是这样一个强大的加密库,尤其在.NET框架下广泛被开发者所使用。BouncyCastle项目,作为一个开源的Java和.NET加密API,提供了丰富的...

Global site tag (gtag.js) - Google Analytics