Bouncy Castle使用备份
来源:互联网 发布:怎样从网络切换到电视 编辑:程序博客网 时间:2024/05/21 06:47
使用的jar包是:bcprov-jdk15on-1.54.jar
base64使用apache的codec里面的,日期使用的joda-time
第一个是以前的bouncy castle版本生成证书的代码,现在可以用,但是已经不推荐了,有些API会显示已经过期了。
public class Test1 { static { Security.addProvider(new BouncyCastleProvider()); } public static void main(String[] args) throws Exception { // Hashtable attrs = new Hashtable(); // Vector order = new Vector(); // // attrs.put(X509Principal.C, "AU"); // attrs.put(X509Principal.O, "The Legion of the Bouncy Castle"); // attrs.put(X509Principal.OU, "Bouncy Intermediate Certificate"); // attrs.put(X509Principal.EmailAddress, // "feedback-crypto@bouncycastle.org"); // // order.addElement(X509Principal.C); // order.addElement(X509Principal.O); // order.addElement(X509Principal.OU); // order.addElement(X509Principal.EmailAddress); // new X509Principal(order, attrs) KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); PublicKey pubKey = keyPair.getPublic(); PrivateKey privKey = keyPair.getPrivate(); X509V3CertificateGenerator certGen = new X509V3CertificateGenerator(); certGen.setSerialNumber(BigInteger.valueOf(1)); certGen.setIssuerDN(new X509Principal( "C=CN,ST=JS,L=SZ,CN=DL,EMAILADDRESS=feedback-crypto@bouncycastle.org,O=OR,OU=OU")); certGen.setSubjectDN(new X509Principal( "C=CN,ST=JS,L=SZ,CN=DL,EMAILADDRESS=feedback-crypto@bouncycastle.org,O=OR,OU=OU")); certGen.setNotBefore(LocalDate.now().toDate()); certGen.setNotAfter(LocalDate.now().plusYears(100).toDate()); certGen.setPublicKey(pubKey); // certGen.setSignatureAlgorithm("MD5withRSA"); certGen.setSignatureAlgorithm("SHA1withRSA"); Certificate cert = certGen.generateX509Certificate(privKey); System.out.println(cert); }}
在新的bouncy castle版本里,推荐使用的是另一个生成方法
X509v3CertificateBuilder是推荐使用的,需要导入另一个jar包bcpkix-jdk15on-1.54.jar
public class Test2 { static { Security.addProvider(new BouncyCastleProvider()); } public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC"); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); PublicKey pubKey = keyPair.getPublic(); PrivateKey privKey = keyPair.getPrivate(); String mySigAlgo = "Sha1withRSA"; SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo .getInstance(pubKey.getEncoded());// X500NameBuilder nameBuilder = new X500NameBuilder();// nameBuilder.addRDN(BCStyle.C, "CN");// nameBuilder.addRDN(BCStyle.ST, "JS");// nameBuilder.addRDN(BCStyle.L, "SZ");// nameBuilder.addRDN(BCStyle.CN, "DL");// nameBuilder.addRDN(BCStyle.E, "feedback-crypto@bouncycastle.org");// nameBuilder.addRDN(BCStyle.O, "O");// nameBuilder.addRDN(BCStyle.OU, "OU");//// X500Name x500Name = nameBuilder.build(); X500Name x500Name = new X500Name("C=CN,ST=JS,L=SZ,CN=DL,EMAILADDRESS=feedback-crypto@bouncycastle.org,O=OR,OU=OU"); LocalDate now = LocalDate.now(); X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder( x500Name, new BigInteger(64, new SecureRandom()), new Date( now.toEpochDay()), new Date(now.plusYears(100) .toEpochDay()), x500Name, publicKeyInfo); ContentSigner signer = new JcaContentSignerBuilder(mySigAlgo) .build(privKey); X509CertificateHolder certHolder = certBuilder.build(signer); X509Certificate cert = (new JcaX509CertificateConverter()) .getCertificate(certHolder); System.out.println(cert); }}
0 0
- Bouncy Castle使用备份
- Bouncy Castle使用(一)【开始】
- bouncy castle
- Bouncy Castle
- 使用Bouncy Castle生成数字签名、数字信封
- 安装 bouncy castle
- Bouncy Castle 算法配置
- PGP Encryption using Bouncy Castle
- Bouncy Castle 的 ASN1 使用方法
- Bouncy Castle扩充算法支持
- 如何使用Bouncy Castle Crypto API来加密和解密数据
- 可用在JavaME上的加密包Bouncy Castle的使用
- 关于使用Bouncy Castle时java.lang.NoSuchFieldError:sha224WithRSAEncryption错误的处理
- Bouncy Castle Crypto API c# port
- Bouncy castle HMAC 消息验证码
- Bouncy Castle加密包的分析
- Java中配置加密组件Bouncy Castle
- Bouncy Castle的Java JCE安装方法
- 格式化CSS文件,使之变成键值对形式
- 机房收费系统遇到的问题(三) 那些细节
- SpringMVC中使用Interceptor拦截器
- 4443: [Scoi2015]小秃玩矩阵 二分答案+最大流
- 百度地图添加多个大头针自定义图片
- Bouncy Castle使用备份
- JS中数字计算精度
- 遍历Map 集合的四种方法
- Android内存泄露的问题
- XCode代码上跳,左移、右移快捷键
- 总结一下自己常用的linux命令(实战or面试必备)
- 图的割边(有缺陷的算法)
- QT中QMainWindow、QWidget、QDialog的区别
- 功成名遂身退,天之道