标签: bouncycastle

如何使用密码加密的Privatekey生成RSA keyPair?

我想生成一个用密码加密的私钥PKCS8格式,我尝试使用这段代码:

String password = "123456";
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
gen.initialize(2048);
KeyPair key = gen.generateKeyPair();
PrivateKey privateKey = key.getPrivate();
PublicKey publicKey = key.getPublic();

FileOutputStream pvt = new FileOutputStream("d:\\pvt123456.der");
try {
    pvt.write(privateKey.getEncoded());
    pvt.flush();
} finally {
    pvt.close();
}
FileOutputStream pub = new FileOutputStream("d:\\pub123456.der");
try {
    pub.write(publicKey.getEncoded());
    pub.flush();
} finally {
    pub.close();
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用3des加密密码以与openssl格式兼容.

java openssl bouncycastle private-key

13
推荐指数
1
解决办法
4万
查看次数

将Bouncy Castle提供程序集成到Java程序中的最佳方法是什么?

将Bouncy Castle提供程序集成到Java程序中的最佳方法是什么?我知道我可以通过以下方式以编程方式添加它:

import org.bouncycastle.jce.provider.BouncyCastleProvider;
...
Security.addProvider(new BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)

或者我可以将它添加到我的机器上的JRE路径中.

什么是最好的选择?

java bouncycastle

13
推荐指数
1
解决办法
2万
查看次数

使用充气城堡在Java中加密xml文件的示例

任何人都可以向我展示(或提供一个链接)如何使用充气城堡加密Java文件?我查看过bouncycastle.org但找不到任何API的文档.即使只知道使用哪些课程对我来说也是一个很大的帮助!

java encryption bouncycastle

12
推荐指数
1
解决办法
5万
查看次数

ECDH和ECDSA密钥之间有区别吗?

我正在构建一个使用BouncyCastle作为加密提供程序的网络应用程序.假设你有这个生成密钥对:

ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
KeyPair pair = g.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么你得到一个ECDSA KeyPairGenerator 的实例.为什么不说EC呢?我知道BouncyCastle附带了一个ECDH Key类型,但我认为这两个代表关于曲线上的点的相同内容 - 或者我完全错误的背后的理论?

我问的原因是,我现在的应用程序使用ECDH罚款来建立AES密钥,但现在我想使用相同的EC密钥使用ECDSA对每条消息进行签名.

java security bouncycastle elliptic-curve

12
推荐指数
1
解决办法
7805
查看次数

仅使用Bouncy Castle阅读PEM RSA公钥

我正在尝试使用C#读取.pem仅包含RSA公钥的文件.我无权访问私钥信息,我的应用程序也不需要它.文件myprivatekey.pem文件以.开头

-----BEGIN PUBLIC KEY----- 最后以 -----END PUBLIC KEY-----.

我目前的代码如下:

    Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair;

    using (var reader = File.OpenText(@"c:\keys\myprivatekey.pem"))
        keyPair = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject();
Run Code Online (Sandbox Code Playgroud)

但是代码会抛出一条InvalidCastException消息

无法将"Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters"类型的对象强制转换为"Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair".

PemReader当没有私钥信息时,如何使用Bouncy Castle 只读公钥?

c# bouncycastle pem public-key

12
推荐指数
2
解决办法
3万
查看次数

C#序列化一个没有无参数构造函数的类

我正在为3种不同的加密类实现工厂模式.工厂将确定要创建哪一个,然后从数据库中获取正确类的序列化实例并将其返回给请求者.现在我正在编写类以将它们存储在数据库中.我正在写一个名为PGP加密类的BouncyCastle.我可以从文件创建类和键,但是当我尝试序列化它时,它表示两个成员变量,它们是类的对象PgpPublicKey,并且PgpPrivateKey由于它们没有无参数构造函数而无法序列化.

public void createdBouncyFromFiles()
{
    var bc = new BouncyCastle("C:\\TestFiles\\BouncyPublicKey.txt", "C:\\TestFiles\\BouncyPrivateKey.txt", "Password1");
    var xmlSerializer = new XmlSerializer(bc.GetType());
    var textWriter = new StringWriter();
    xmlSerializer.Serialize(textWriter, bc);
    var theSerializedClass = textWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)

该类有两个成员变量是问题.

public class BouncyCastle : ICryptographyProvider
{

    public PgpPublicKey m_publicKey;
    public PgpPrivateKey m_privateKey;
    public string m_passPhrase;
    // cut out the irelevant parts
Run Code Online (Sandbox Code Playgroud)

这是公钥类.没有无参数的构造函数.

public class PgpPublicKey
{
    public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
    // cut other methods
}
Run Code Online (Sandbox Code Playgroud)

c# serialization bouncycastle

12
推荐指数
2
解决办法
3万
查看次数

阅读pkcs12证书信息

我在阅读证书信息时遇到问题.我想以编程方式在Android中使用带有bouncycastle库的java阅读完整信息.现在,我只是在控制台中使用keytool命令:

>keytool -list -keystore 1.p12 -storetype pkcs12 -v
Run Code Online (Sandbox Code Playgroud)

有什么建议?

java bouncycastle jce pkcs#12

12
推荐指数
1
解决办法
4万
查看次数

将RSA公钥转换为PEM格式

我想转换 -

RSA Public Key
            modulus: 9699c3c4406464638d2b30dbed44ddee485b5f9a3d7491434049440d34eb1759376a8bac0e37cee5c18df69acfc60d7252634fd15c26ab2afa16ca831598381356209acea9cea9467acdbd2a9b6d8e7b38d1baa826b1fbce2c185ba324bd17c9fdd6558eb57a082ca8c37fccaa86d4f9ffdc4e5d4a4a7f8e5f5410f835f98c64776cfc3421f19db99f140590d871e5e53efce6be8b9daffa3ab876005a48d249378ecc766281e931921e2ef0105fb64fa26952f91ad1627fedbb429aba75d3788bf7c0324f9fc1b48a9f5490ee0ab42e9e4c88ea564943aa5d9f43f7421b7d28788496daf7426f2e193199d4a525b38f0f3f68ab3c37b09fba2cc21f38e7a769
    public exponent: 10001
Run Code Online (Sandbox Code Playgroud)

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh74GWHRE+YCdi539to51
xpXlJiBI0VvSLbnUwbdKi6UP3HuOPbhVVNNAqyCs/bVIcHdZIap+Pb70Ry04L17H
RsQTOPyl4Us5r7WlzHG4J6p8XU5bl8wS0SU848oABkOIa5D4q0ap0Ryx0SniWPGP
OvPN5qA+cSHwJFgT7Ba/MQB99nJm0iLhnw5QFbtFCb8rCPXHRNYeXwAxUp33oNqZ
IMIWb+DoyyQjwizemiSgQaAk2iEGf7L7N0drlBS9/L/DWvgOOLGNJrK3uZnewNuU
2gma21x60nmWvFBMn87ocGtA4CU6GRrWX0cOvEPL/qXYy/+yA2WpM3op3YW9Hg+i
HQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

无论是使用标准Java还是BouncyCastle,任何指针都会有所帮助.

security bouncycastle

12
推荐指数
1
解决办法
7684
查看次数

Bouncy Castle scrypt实施

我目前正在使用scrypt实现密码哈希.我已经在GitHub上找到了一个很好的scrypt实现.令我惊讶的是,我还在Bouncy Castle图书馆中发现了一个scrypt实现.该类没有记录,维基百科没有提到Bouncy Castle作为scrypt实现提供程序,我真的很难找到使用Bouncy Castles scrypt的人的任何代码示例,所以这看起来有些可疑.

另一方面,如果我不得不在GitHubs加密实现和Bouncy Castle之间做出选择,我宁愿选择Bouncy Castle.

那么Bouncy Castles是否会破坏 "真实的东西"?我可以使用Bouncy Castles scrypt而不是JCA提供者API(或者我需要像这里一样直接调用它:带有充气城堡的scala中的AES-256加密工作流程:盐和IV的使用和传输/存储)?


编辑:我现在可以得到的最佳答案:https://www.bouncycastle.org/devmailarchive/msg13653.html

java bouncycastle scrypt

12
推荐指数
2
解决办法
2685
查看次数

如何使用PFX(Bouncy Castle或其他)以编程方式对可执行文件进行代码签名

我正在尝试确定使用Bouncy Castle,托管代码或来自C#的非托管代码对可执行文件进行代码签名的最佳方法.由于CAPICOM现已弃用,我想mssign32.dll中的一个SignerSign方法是最好的方法,如果它需要不受管理.

这个答案(/sf/answers/276656481/)似乎很接近,但它产生一个.p7m文件,虽然看起来是正确的大小,但是无法正常运行(显然在运行之前重命名为.exe) ).

问题提供者在这里提供的解决方案(用于替换signtool.exe的API /库)看起来很有前途和管理,但就像Tom Canham在下面的评论中提到的那样,"这似乎是用于签署封装消息.Authenticode - 代码 - 签署signtool所做的 - 是不同的,这就是为什么签署后EXE不会运行的原因." 当我使用提问者的解决方案或之前引用的Bouncy Castle解决方案签名时,我收到了Tom所做的相同错误.

我还没有尝试过唯一的选择(/sf/answers/450090231/),虽然看起来很有希望,但我并不认为它使用"authenticode"代码签名而不是"封闭的消息"代码签名.这个答案也有不使用现在已弃用的CAPICOM互操作方法的好处,所以我想我今天将使用这种方法报告我的结果.如果这是最好的选择,那么有人可以说出从mssign32.dll导出的SignerSign,SignerSignExSignerSignEx2函数之间的区别吗?我已经读过SignerSignEx2应该与Windows 8及更高版本一起使用...

长话短说,我想复制signtool.exe签署.exe文件,.pfx文件和密码的可执行文件的能力,如下所示:

signtool sign /f cert.pfx /p password application.exe
Run Code Online (Sandbox Code Playgroud)

我正在寻找使用authenticode签名以编程方式对可执行文件进行代码签名(PE,如果它很重要)的最佳选项,如果可能的话,我宁愿使用充气城堡或托管代码,尽管我会使用非托管的东西,如果它工作但不是目前已弃用.

谢谢!

.net c# bouncycastle capicom

12
推荐指数
1
解决办法
3377
查看次数