Tag: bouncycastle

如何用java读取密码加密密钥?

我将私钥存储在PKCS8 DER格式的文件中,并受密码保护。 最简单的阅读方式是什么? 这是我用来加载未加密的代码: InputStream in = new FileInputStream(privateKeyFilename); byte[] privateKeydata = new byte[in.available()]; in.read(privateKeydata); in.close(); KeyFactory privateKeyFactory = KeyFactory.getInstance(“RSA”); PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(privateKeydata); PrivateKey privateKey = privateKeyFactory.generatePrivate(encodedKeySpec); 它适用于具有相同规范的未加密密钥。 顺便说一下,我正在使用BouncyCastle。 我可以使用以下openssl命令查看此私钥 openssl pkcs8 -in ./privatekey.key -inform DER -passin pass:thisismypass 请帮忙!!! 我已经在我自己对这个主题的回答中发布了一些解决方案。 但是如果没有额外的库,只有BouncyCastle,任何人都可以提供帮助,我仍然无法回答问题。

使用Java和Bouncycastle进行X.509证书validation

通过bouncycastle wiki页面,我能够理解如何创建X.509根证书和认证请求,但我不太明白如何在此之后继续进行概念和编程。 让我们假设甲方做了一个证书请求,并从CA获得了他的客户证书。 某些乙方如何validationA的证书? A需要什么样的证书? 根证书? “普通”客户证书? 如果我们假设A已成功将他的证书以DER或PEM格式发送给B,那么validation如何在编程级别上工作? 任何帮助深表感谢。 最诚挚的问候,Rob

ECDSA使用BouncyCastle签名并使用Crypto ++进行validation

这是Java代码: public static String sign(String data) throws Exception { KeyPair keyPair = loadKeyPair(System.getProperty(“user.dir”), “ECDSA”); Signature signature = Signature.getInstance(“SHA256withECDSA”, “BC”); signature.initSign(keyPair.getPrivate(), new SecureRandom()); byte[] message = data.getBytes(); signature.update(message); byte[] sigBytes = signature.sign(); String signatureStr = new BigInteger(1, sigBytes).toString(16); return signatureStr; } 然后用C ++代码validation签名 bool VerifyMessage( const ECDSA::PublicKey& key, const string& message, const string& signature ) { […]

SHA256withRSA和SHA256之间的区别然后是RSA

使用以下两种方法计算签名有什么区别? 使用Signature.getInstance(“SHA256withRSA”)计算签名 使用MessageDigest.getInstance(“SHA-256”)计算SHA256并使用Signature.getInstance(“RSA”);计算摘要Signature.getInstance(“RSA”); 获得签名? 如果它们不同,有没有办法修改方法2,以便两种方法都给出相同的输出? 我尝试了以下代码: package mysha.mysha; import java.security.MessageDigest; import java.security.PrivateKey; import java.security.Security; import java.security.Signature; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class MySHA256 { public static void main(String[] args) throws Exception { //compute SHA256 first Security.addProvider(new BouncyCastleProvider()); String s = “1234”; MessageDigest messageDigest = MessageDigest.getInstance(“SHA-256”); messageDigest.update(s.getBytes()); byte[] outputDigest = messageDigest.digest(); //sign SHA256 with RSA PrivateKey privateKey = […]

Java Bouncy Castle Cryptography – 使用AES加密

如何使用java bouncy castle library实现AES加密? 示例代码或示例代码的链接会很好:)

使用BouncyCastle API生成CSR

我是Java的安全方面的新手,偶然发现了这个名为bouncycastle的库。 但他们提供的例子和互联网上的例子要求使用 – return new PKCS10CertificationRequest(“SHA256withRSA”, new X500Principal( “CN=Requested Test Certificate”), pair.getPublic(), null, pair.getPrivate() 但是当我使用PKCS10CertificationRequest时,看起来它已被弃用。 所以我开始研究另一种使用CertificationRequest类的方法。 但我真的很困惑,构造函数不采用相同的参数,而是需要CertificationRequestInfo类,我不知道如何填写。 CertificationRequest request = new CertificationRequest(…); 如果有人可以帮我弄清楚如何制作CSR以便我可以将其发送到服务器以获得签名,那将是非常棒的。 谢谢,

如何从EC公钥字节中获取PublicKey对象?

我正在开发一个应用程序,需要在secp256r1 (NIST P-256,P-256,prime256v1)公钥的帮助下validationSHA256withECDSA签名。 公钥在某个较早的时间点由不同的应用程序生成,并以hex编码存储在我的数据库中。 这里hex字符串的格式等同于OpenSSL在文件x.pem上调用openssl ec -in x.pem -noout -text时生成的hex字符串,该文件先前由openssl ecparam -genkey -name secp256r1 -out x.pem生成openssl ecparam -genkey -name secp256r1 -out x.pem 。 消息和签名是从不同的应用程序接收的。 考虑以下测试数据: // Stored in Database byte[] pubKey = DatatypeConverter.parseHexBinary(“049a55ad1e210cd113457ccd3465b930c9e7ade5e760ef64b63142dad43a308ed08e2d85632e8ff0322d3c7fda14409eafdc4c5b8ee0882fe885c92e3789c36a7a”); // Received from Other Application byte[] message = DatatypeConverter.parseHexBinary(“54686973206973206a75737420736f6d6520706f696e746c6573732064756d6d7920737472696e672e205468616e6b7320616e7977617920666f722074616b696e67207468652074696d6520746f206465636f6465206974203b2d29”); byte[] signature = DatatypeConverter.parseHexBinary(“304402205fef461a4714a18a5ca6dce6d5ab8604f09f3899313a28ab430eb9860f8be9d602203c8d36446be85383af3f2e8630f40c4172543322b5e8973e03fff2309755e654”); 现在这应该是一个有效的签名。 我的目标是使用Java和/或Bouncycastle加密APIvalidation消息上的签名。 我isValidSignature创建了一个方法isValidSignature : private static boolean isValidSignature(byte[] pubKey, […]

使用bouncycastle签署和validation签名的正确方法

我使用bcmail-jdk16-1.46.jar和bcprov-jdk16-1.46.jar (Bouncycastle库)来签名string ,然后validationsignature 。 这是我签署string code : package my.package; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.Security; import java.security.Signature; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import org.bouncycastle.cert.jcajce.JcaCertStore; import org.bouncycastle.cms.CMSProcessableByteArray; import org.bouncycastle.cms.CMSSignedData; import org.bouncycastle.cms.CMSSignedDataGenerator; import org.bouncycastle.cms.CMSTypedData; import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; import org.bouncycastle.util.Store; import sun.misc.BASE64Encoder; public class SignMessage { […]

使用BouncyCastle从文件中读取椭圆曲线私钥

BouncyCastle加密API允许使用常规java.security包对象创建和validation数字签名,例如java.security.PublicKey , java.security.PrivateKey及其容器java.security.KeyPair 。 假设我使用OpenSSL创建一个.pem(或者,如果更简单,一个.der文件),它包含我想在我的应用程序中使用的椭圆曲线私钥。 例如,它看起来像这样: —–BEGIN EC PARAMETERS—– BgUrgQQACg== —–END EC PARAMETERS—– —–BEGIN EC PRIVATE KEY—– MHQCAQEEIDzESrZFmTaOozu2NyiS8LMZGqkHfpSOoI/qA9Lw+d4NoAcGBSuBBAAK oUQDQgAE7kIqoSQzC/UUXdFdQ9Xvu1Lri7pFfd7xDbQWhSqHaDtj+XY36Z1Cznun GDxlA0AavdVDuoGXxNQPIed3FxPE3Q== —–END EC PRIVATE KEY—– 如何使用BouncyCastle API获取包含此私钥和相应公钥的java.security.KeyPair ? 请注意我想使用BouncyCastle 1.50中提供的API(在撰写本文时是最新的)并且没有弃用的API。 遗憾的是,这不包括其他SO答案中使用的PEMReader类。 此外,这个问题特定于椭圆曲线的格式; 在比较RSA或DSA密钥文件时,它们包含其他参数。

自签名X509证书与Java中的Bouncy Castle

我需要在Java中创建一个带有Bouncy Castle的自签名X509证书,但我尝试包含的每个类都已弃用。 我怎么解决这个问题? 是否还有其他课程要包括在内? 谢谢