bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供JCE 1.2.1的实现。

保持Bouncy Castle项目进行

随着各种算法的更改,更新,协议中的安全问题,以及不得不为诸如CERT等组织编写供应商声明,保持Bouncy Castle项目的进行正在变成一个全职工作,我们中的几个人现在已经放弃了稳定的工作,以释放上班时间。如果您正在使用我们的软件,并且有兴趣确保在需要我们时总是在这里,有两种主要的方式可以帮助您。

第一个是通过获得支持合同或通过赞助项目的具体工作。不仅你会得到Bouncy Castle开发商的热线,咨询时间,如果需要的话可以发布警报,但是如果你愿意,我们也会公开承认你的支持。您可以在Crypto Workshop找到有关支持合同和咨询的更多信息。

其次, Bouncy Castle APIs现已由一个注册澳大利亚慈善组织,Bouncy Castle Inc,ABN 84 166 338 567正式拥有。在不考虑实际做我们做的事情的成本的同时,我们也在筹集资金允许我们获得诸如API的FIP等认证。我们可以通过PayPal,比特币或直接转账接受捐款。

当前功能列表:

  • 生成和解析 PKCS-12 文件。
  • X.509:V1和V3证书的生成器和解析器,V2 CRLs和属性证书。
  • 由PbeUtilities支持的PBE算法:PBEwithMD2andDES-CBC, PBEwithMD2andRC2-CBC,
    PBEwithMD5andDES-CBC, PBEwithMD5andRC2-CBC, PBEwithSHA1andDES-CBC,
    PBEwithSHA1andRC2-CBC, PBEwithSHA-1and128bitRC4,
    PBEwithSHA-1and40bitRC4, PBEwithSHA-1and3-keyDESEDE-CBC,
    PBEwithSHA-1and2-keyDESEDE-CBC, PBEwithSHA-1and128bitRC2-CBC,
    PBEwithSHA-1and40bitRC2-CBC, PBEwithHmacSHA-1, PBEwithHmacSHA-224,
    PBEwithHmacSHA-256, PBEwithHmacRIPEMD128, PBEwithHmacRIPEMD160, and
    PBEwithHmacRIPEMD256
  • SignerUtilities 支持的签名算法:MD2withRSA, MD4withRSA, MD5withRSA,
    RIPEMD128withRSA, RIPEMD160withECDSA, RIPEMD160withRSA,
    RIPEMD256withRSA, SHA-1withRSA, SHA-224withRSA,
    SHA-256withRSAandMGF1, SHA-384withRSAandMGF1, SHA-512withRSAandMGF1,
    SHA-1withDSA, and SHA-1withECDSA.
  • 对称密钥算法: AES, Blowfish, Camellia, CAST5, CAST6, ChaCha, DES, DESede,
    GOST28147, HC-128, HC-256, IDEA, ISAAC, Noekeon, RC2, RC4, RC5-32,
    RC5-64, RC6, Rijndael, Salsa20, SEED, Serpent, Skipjack, TEA/XTEA,
    Threefish, Tnepres, Twofish, VMPC and XSalsa20.
  • 对称密钥模式:CBC,CFB,CTS,GOFB,OFB,OpenPGPCFB和SIC(或CTR)。
  • 对称密钥填充: ISO10126d2, ISO7816d4, PKCS-5/7, TBC, X.923, and Zero Byte.
  • 不对称密钥算法: ElGamal, DSA, ECDSA, NaccacheStern and RSA (with blinding).
  • 非对称密钥填充/编码:ISO9796d1, OAEP, and PKCS-1.
  • AEAD块密码模式:CCM,EAX,GCM和OCB。
  • 摘要:GOST3411,Keccak,MD2,MD4,MD5,RIPEMD128,RIPEMD160,RIPEMD256,RIPEMD320,SHA-1,SHA-224,SHA-256,SHA-384,SHA-512,SHA3,Tiger和Whirlpool。
  • XOFs:SHAKE。
  • 签名机制:DSA,ECDSA,ECGOST3410,ECNR,GOST3410,ISO9796d2,PSS,RSA,X9.31-1998。
  • 密钥协议:Diffie-Hellman,EC-DH,EC-MQV,J-PAKE,SRP-6a。
  • Macs: CBCBlockCipher, CFBBlockCipher, CMAC, GMAC, GOST28147, HMac,
    ISO9797 Alg. 3, Poly1305, SipHash, SkeinMac, VMPCMAC.
  • PBE生成器: PKCS-12 PKCS-5 - 方案1和2。
  • OpenPGP(RFC 4880)
  • 加密消息语法(CMS,RFC 3852),包括流式API。
  • 在线证书状态协议(OCSP,RFC 2560)。
  • 时间戳协议(TSP,RFC 3161)。
  • TLS / DTLS客户端/服务器,最高版本1.2,支持最常见的密码和扩展,以及许多较不常见的密码。非阻塞API可用。
  • 椭圆曲线密码:支持通用的 F2m Fp 曲线,用于许多标准化曲线的高性能定制实现。
  • 读/写PEM文件,包括RSA和DSA密钥,具有各种加密功能。
  • PKIX证书路径验证

编程方式读取X.509证书吊销列表(CRL)(一)应用Bouncy Castle Crypto

X.509 结构的证书被吊销后,序列号会出现在Certificate Revocation List (CRL) 中,我们可以将它另存为一个.crl的文件,就能够查看被吊销的证书信息,但.NET Framework并没有提供可对Crl进行属性访问的类(Java中提供了X509Crl),要实现这样的功能,我们得借助.NET框架之外的技术:Bouncy Castle Crypto或者Mono SDK。

先介绍如何使用Bouncy Castle Crypto(Version 1.4)读取X.509证书及吊销列表。
首先加入X.509证书所在的命名空间:

using Org.BouncyCastle.X509;

其中的几个有关的类:

X509CrlParser 用于构建一个crl对象,支持从字节数组和内存流中获取数据。

X509Crl crl对象,包含证书吊销组织、吊销证书列表、时间戳等信息。

X509CrlEntry crl对象中被吊销的证书对象。

ISet 在Org.BouncyCastle.Utilities.Collections下,X509Crl中被读取所有证书对象放在HashSet中,以ISet接口类型返回,HashSet支持迭代器。

下面是读取Crl的示例:

//获取obj
List<int> numbers = new List<int>();
X509CrlParser parser = new X509CrlParser();
X509Crl crl = parser.ReadCrl((byte[])obj);
//获取所有的吊销证书
ISet crlSet = crl.GetRevokedCertificates();
if (crlSet != null && crlSet.Count > 0)
    foreach (object o in crlSet)
        X509CrlEntry crlEntry = (X509CrlEntry)o;
        int serialNumber = crlEntry.SerialNumber.IntValue;
        if (!numbers.Contains(serialNumber))
            numbers.Add(serialNumber);

X509CrlEntry.SerialNumber.IntValue将16进制的证书序列号以10进制的Int32类型输出。

另外再提一下BC Crypto的X509Certificate类和.NET Framework下的X509Certificate2类的区别:

X509Certificate2输出证书DN信息时,属性SubjectName是将个人信息按照从小到大(姓名-组织-市-省-国家)排列,而BC Crypto的X509Certificate使用SubjectDN属性,将个人信息从大到小排列,市的标识是ST,.NET是S。如果需要根据证书生成组织结构,这个需要特别注意。

BouncyCastle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;Bouncycstle 包含了大量的密码算法,其支持椭圆曲线密码算法,并提供JCE 1.2.1的实现。 2、为什么要使用BouncyCastle? 我们知道,Java标准库提供了一系列常用的哈希算法。但如果我们要用的某种算法,Java标准库没有提供怎么办? 方法一:自己写一个,难度很大; 方法二:找一个现成的第三方库,直接使用BouncyCastle就是一个提供了很多哈希算法和加密算法的 在这个示例中,我们使用Bouncy Castle加密库来实现SM4加密。该方法使用了CBC模式,并使用随机生成的IV来增强安全性。我们将IV和密文组合成一个字节数组,并将其转换为十六进制字符串以便于输出和传输。要使用此方法,请将上面的代码复制到Java文件中,然后在需要调用的地方使用。方法,并提供要加密的明文和密钥。例如,在main()方法中,我们将。作为密钥,并打印出加密后的密文。 SRP-6 协议实现概念的一个小证明。 它是一种协议,可以在不向服务器发送明文密码的情况下通过服务器对用户进行身份验证。 有关更多信息,请查看上的作者论文。 我将 phpseclib 的用于服务器算术实现,以及 Clipperz.io 的用于客户端加密。 这只是概念实现的证明。 请勿在生产环境中使用Bouncycstle 是一款开源的密码包,其包含了大量的密码算法,其支持椭圆曲线密码算法,本文主要说明 Bouncy Castle 如何配置和简单使用Bouncy Castle 简介 Bouncy Castle 两种配置方式 Java 进口管制限制解除 创建 CRL 需要用到有 CRL 权限的 CA 机构私钥和证书: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); // 准备好创建 CRL 所需的私钥和证书 PrivateKey caPrivateKey = ...... X509Ce... Bouncy Castle BouncyCastle是一种用于 Java 平台的开放源码的轻量级密码术包,支持大量的密码算法,能够提供数字证书转换所需要的类和方法。 1.1 jar包下载 官网下载相关jar包 所需jar包: bcprov-jdk15to18-169.jar bcprov-ext-jdk15to18-169.jar SM4 加密算法 加密 SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。 加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。 public class encryption_decrypt { static { Security.addProvider(new BouncyCastleProvi csr证书也称为p10证书https://blog.csdn.net/weixin_36296559/article/details/90383604?ops_request_misc=&request_id=&biz_id=102&utm_term=java生成p10证书&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-7-90383604.pc_v2_rank_ 先分析异常的描述: JCE cannot authenticate the provider BC:在使用第三方的jar包时,java会对jar包的签名进行验证,以确认jar包是不是合法的。 SecurityException:加密异常。 总结:在使用加密的第三方类时,验证签名不过关。 然后分析异常的具体位置: 找到具体抛异常的位置 然后往上翻可以看到这个类具体是什么作用 BouncyCastle类是一个加密的第三方类,jdk本身是有一些加密的方法的,如果需要额外的一些加密方法的话需要用到Boun