Tag: bouncycastle

X500Principal杰出名称顺序

我正在使用Bouncycastle lib使用X509v3CertificateBuilder类从PKCS10请求生成证书。 它返回构建X509CertificateHolder对象,该对象包含生成的证书。 如果我在持有者上调用getIssuer,它会以正确的顺序返回发行者专有名称(如果我在发行者证书上调用getSubjectX500Principal(),则返回相同的名称),如果我使用java CertificateFactory解析持有者的编码版本,则getIssuerX500Principal ()方法生成的证书以相反的顺序返回DN,有什么不对? 这是我正在尝试做的示例代码: X509CertificateHolder holder = certBuilder.build(sigGen); holder.getIssuer(); //Returns the DN in the correct order (same as in issuer cert) CertificateFactory certFactory = CertificateFactory.getInstance(“X.509”); X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(holder.getEncoded())); cert.getIssuerX500Principal().getName(); //Returns issuer DN in reverse order

为什么桌面AES文件IO与Android AES文件IO不兼容?

我已将Android应用程序移植到桌面,使用AES加密某些私有数据。 两个应用程序都能够加密和解密数据供自己使用,但无法解密其他应用程序数据。 AES密钥,IV和算法是相同的。 这两个应用程序的主要区别在于android-sdk附带了BouncyCastle提供程序,已经添加到安全性,而桌面应用程序需要 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); Android应用: public class AesFileIo { public final static String EOL = “\n”; public static final String AES_ALGORITHM = “AES/CTR/NoPadding”; public static final String PROVIDER = “BC”; private static final SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY_128, “AES”); private static final IvParameterSpec ivSpec = new IvParameterSpec(IV); public String readAesFile(Context c, String fileName) […]

如何使用新的Bouncy Castle库从PKCS10CertificationRequest获取PublicKey?

在新版本的Bouncy Castle库中, PKCS10CertificationRequest发生了PKCS10CertificationRequest 。 在以前的版本中,可以使用getPublicKey()方法从此类请求获取PublicKey (请参阅旧文档 )。 现在这种方法消失了。 如何通过此类请求获取PublicKey? 有getSubjectPublicKeyInfo().parsePublicKey()但它返回ASN1Primitive 。 我从SPKAC NetscapeCertRequest看到我仍然可以通过调用getPublicKey()直接读取PublicKey。

在BouncyCastle上使用数字签名算法(ECDSA)实现的椭圆曲线

我正在尝试实现ECDSA(椭圆曲线数字签名算法),但我在Java中找不到任何使用Bouncy Castle的例子。 我创建了密钥,但我真的不知道我应该使用什么样的函数来创建签名并validation它。 public static KeyPair GenerateKeys() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException { ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(“B-571”); KeyPairGenerator g = KeyPairGenerator.getInstance(“ECDSA”, “BC”); g.initialize(ecSpec, new SecureRandom()); return g.generateKeyPair(); }

PKCS#7登录并validation标志

我正在尝试使用PKCS#7签名并validation标志。 我正在跟着用Java开始加密的书。 我已经编写了示例代码来签名和validation。 当我试图附加签名并将其写入文件然后尝试validation我得到exception时(下面给出例外) 我想知道如何将这个签名数据写入文件? 我是否还需要将密钥库分享给将validation该标志的第二人? org.bouncycastle.cms.CMSException:message-digest属性值与计算值不匹配 在org.bouncycastle.cms.SignerInformation.doVerify(未知来源) at org.bouncycastle.cms.SignerInformation.verify(Unknown Source) at org.bouncycastle.cms.SignerInformation.verify(Unknown Source) 在com.inc.cms.test.bc.Test.isValidSignature(Test.java:150) 在com.inc.cms.test.bc.Test.verifyData(Test.java:120) 在com.inc.cms.test.bc.Test.main(Test.java:78) 非常感谢 我的代码如下 请帮我解决这个问题。 非常感谢 `package com.inc.cms.test.bc; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.cert.CertPathBuilder; import java.security.cert.CertStore; import java.security.cert.Certificate; import java.security.cert.CollectionCertStoreParameters; import java.security.cert.PKIXBuilderParameters; import java.security.cert.PKIXCertPathBuilderResult; […]

使用给定私钥在椭圆曲线算法中生成公钥的代码

我需要使用jdk 1.7实现ECC(椭圆曲线加密)算法。 我尝试使用充气城堡,sunEC,但他们都给出了错误和错误。 我的目标是使用私钥生成椭圆曲线,我将被赋予系统。 因此,我需要使用jdk1.7获取使用给定私钥生成公钥的准确代码。 我使用的IDE是ecllipse。 我需要知道,除私钥外,我应该给出的其他参数是什么? 提供曲线点和私钥是否足够? 有人可以帮我从私钥生成公钥吗? 我可以管理其余的实现。 任何知道使用java实现Elliptic Curve Cryptography键的人,请告诉我这段代码是否正确? public class ECCrypt { private ECPoint curve_point; public ECCrypt(ECPoint curve_point) { this.curve_point = curve_point; } public BigInteger makePublicKey(BigInteger privateKey) { ECPoint ecPublicKey = new ECPoint(curve_point); ecPublicKey.mult(privateKey); return ecPublicKey.pack(); } public static void main(String[] argv) throws Exception { java.util.Random rnd = new java.util.Random(); […]

使用JAVA使用BouncyCastle签署CAdES

根据我发现的几个post,现在可以使用BouncyCastle执行CAdES,但几乎没有关于该主题的任何文档。 对于初学者,我想在具有基于文件的证书的文件上执行CAdES-BES而没有任何可选的签名属性。 为了回应皮屑: 我有一些可能有用的东西,你有你的SignerInformation,你需要扩展它,首先你需要从时间戳创建一个属性,我假设你已经有一个TimeStampResponse作为tspResp TimeStampToken token = tsresp.getTimeStampToken(); Attribute timeStamp = new Attribute(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, new DERSet(ASN1Object.fromByteArray(token.getEncoded()))); 然后你需要扩展你的SignerInformation AttributeTable unsigned = signerInformation.getUnsignedAttributes(); Hashtable unsignedAttrHash = null; if (unsigned == null) { unsignedAttrHash = new Hashtable(); } else { unsignedAttrHash = signerInformation.getUnsignedAttributes().toHashtable(); } unsignedAttrHash.put(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, signatureTimeStamp); SignerInformation newsi = SignerInformation.replaceUnsignedAttributes(si, new AttributeTable( unsignedAttrHash)); 我认为就是这样。 以下是我获得signin-certificate属性的方法 Attribute signingCertificateAttribute; MessageDigest dig […]

如何解密签名的pgp加密文件?

如何使用BouncyCastle Java API解密和validation使用PGP加密的文件?

RSA密钥对使用充气城堡生成。 使代码可以从java程序运行

我使用的Java代码通过充气城堡库生成公钥和私钥。 我的问题是将它实现到我的Android设备可运行的代码中。 我的代码没有像我编写的那样显示RSA密钥,并且在我的大部分故障排除中,我仍然无法按照我的要求进行代码,尽管我没有错误。 我怀疑的是我将所有代码放入try / catch块的方式,但我不太确定。 编辑:代码较低 这是生成RSA公钥和私钥的Java类。 (有用) public class ClassMain { public static void main(String[]args) throws Exception { String ST = “Ebenezersawesome”; byte[] plainText = “ST”.getBytes(“UTF8”); // Generating RSA Key System.out.println(“\nStart generating RSA key”); KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”); keyGen.initialize(4096); KeyPair key = keyGen.generateKeyPair(); System.out.println(“Finish generating RSA key”); // // Creates an RSA Cipher […]

如何从pem文件加载公共证书?

我试图从下面的文件中提取RES公钥 —–BEGIN CERTIFICATE—– MIIGwTCCBamgAwIBAgIQDlV4zznmQiVeF45Ipc0k7DANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBDQS0zMB4XDTEyMTAzMDAwMDAwMFoXDTE1MTEwNDEyMDAwMFowgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVUZXhhczEQMA4GA1UEBxMHSG91c3RvbjEpMCcGA1UEChMgVmFsZXJ1cyBDb21wcmVzc2lvbiBTZXJ2aWNlcywgTFAxCzAJBgNVBAsTAklUMRkwFwYDVQQDDBAqLnZhbGVydXMtY28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1GR2NKV9GwVHBtpvgBUdVVbd6qeh6aKOS/r5TIKFd3vFBGjC7cWYwF26F0YFvrAP262Yu+oDRTeuSKwyHmegD7aTSOyCTOva69WcnKYRmNfHsnnGRa5z4v9EKc1RbNcwIrDUz8zcdHdP6AO8JJgLreWyBl15WXdxAr3yNbwoyJTbWk2ToC64LASP+8SQQTRszg762FIbhZ8xda8KKGAyC29/FOcLIttoBANT4hEwvcRLKOxAA8tg322Dla1XU2gnxWP2dSuLEflGRcEovPjGqxCzuGe0aN8Lg7aKwgCR1OYXmGiKCNHupHkN7A+QrD8zrxKUFd1UiyLcIovYhadcdQIDAQABo4IDTDCCA0gwHwYDVR0jBBgwFoAUUOpzidsp+xCPnuUBINTeeZlIg/cwHQYDVR0OBBYEFKKX1d9m6kHUjxQ1OpzXgNRbNGR4MCsGA1UdEQQkMCKCECoudmFsZXJ1cy1jby5jb22CDnZhbGVydXMtY28uY29tMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBhBgNVHR/wQCMAAwDQYJKoZIhvcNAQEFBQADggEBALdCoLlXX4Sg8pKcqlT8l1MHbS2rsnw03R8lVQBQqcJimE9VZqDdoLfEPASIEMQbl40T6RHb4tFuZNjP2y4Fy3jMAYf1yajZAtAd5OLOMU39cgZQY2J8QCeEVKt8qbH6P32/2yyuh4hcNL4Vz8G0MTzwVUjz8WVmUBHAQSpS0T9oDKkwvmrkPGJFVuBxCRDKYb/23O8EKKzSTiO37VbCaeFUrTuWc8tGP8XDqRdj2yefiVqcNp4xr2tq9ZhJcISWODqO4fzt6vPOwgdnY3fbPLeH2tZoZTSCPURAadoNOAIC6fCLFlHjLuRGkxWIHMX3QnrrVD8pC7FnDO09q/aADew= —–END CERTIFICATE—– 这是我做的代码.. public static PublicKey loadPublicKeyFromFile(File publicKeyFile) throws Exception { FileReader file = new FileReader(publicKeyFile); PemReader reader = new PemReader(file); X509EncodedKeySpec caKeySpec = new X509EncodedKeySpec(reader.readPemObject().getContent()); KeyFactory kf = KeyFactory.getInstance(“RSA”); PublicKey caKey = kf.generatePublic(caKeySpec); return caKey; } 但它抛弃了 java.security.InvalidKeyException: IOException: ObjectIdentifier() — data isn’t an object ID 从文件中提取RES公钥的适当方法是什么?