标签: bouncycastle

从SubjectPublicKeyInfo获取公钥

我正在尝试从SubjectPublicKeyInfo 获取公钥。但是当我尝试时:

PublicKey publicKey = k.generatePublic(keypsec);

byte[] encoded=publicKey.getEncoded();
SubjectPublicKeyInfo subPkInfo2 = new SubjectPublicKeyInfo(rsaEncryption, encoded);     
RSAPublicKeyStructure  pubKey = new RSAPublicKeyStructure((ASN1Sequence)subPkInfo2.getPublicKey());
Run Code Online (Sandbox Code Playgroud)

它抛出这个

java.lang.IllegalArgumentException: illegal object in getInstance: org.bouncycastle.asn1.DERSequence
    at org.bouncycastle.asn1.DERInteger.getInstance(DERInteger.java:37)
    at org.bouncycastle.asn1.x509.RSAPublicKeyStructure.<init>(RSAPublicKeyStructure.java:63)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我尝试过 PubliKeyFactory 但它只是调用最后一行。

bouncycastle java-me public-key

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

将 java.security.PrivateKey 转换为字符串

PrivateKeya 转成Stringwith的方法有哪些

-----BEGIN PRIVATE KEY-----并且-----END PRIVATE KEY-----可以用作要上传到服务器的私钥文件。

其实现是sun.security.rsa.RSAPrivateCrtKeyImplgetFormat()PKCS#8

java base64 bouncycastle x509

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

转换椭圆曲线参数(BC 到 MS)

我正在尝试生成 ECDSA 自签名证书,如使用 ECDSA 生成证书中所述。将 bartonjs 的答案中的所有部分放在一起并使用Net.Framework 4.7(或Net.Core 2.0) 以下代码似乎有效,尽管还存在一些歧义(至少一个):

我不确定如何正确地将私钥(“D”参数)从 转换BC-BigIntegerMS-byte[]. 使用BigInteger.ToByteArray()抛出异常:

CryptographicException:指定的关键参数无效。QX 和 QY 是必填字段。QX、QY 的长度必须相同。如果指定了 D,则它必须与命名曲线的 QX 和 QY 长度相同,或者与显式曲线的 Order 长度相同。

同时验证 ECParameters(方法ECParameters.Validate())。使用BigInteger.ToByteArrayUnsigned()提供了更好的结果(数百个生成的密钥对中的一个失败),但仍然......

使用ToByteArray()转换后的“D”通常会长一个字节(“D”有 33 个字节,而 DX 和 DY 有 32 个字节)。使用ToByteArrayUnsigned()“D”有时会短一个字节。

所以我的问题是是否可以使用ToByteArrayUnsigned()

private const string NCryptExportPolicyProperty = "Export Policy";
private const string SignatureAlgorithm = "Sha256WithECDSA";
private static readonly ECCurve MsCurve = ECCurve.NamedCurves.nistP256; …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle certificate ecdsa

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

是否可以在 JDK 1.7 上使用 GCM 和 BC?

我正在尝试使用任何 AES GCM 变体进行 TLS 连接,根据我在文档中的理解,这应该是可能的,但我收到此错误:

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1989)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1096)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1342)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1369)
Run Code Online (Sandbox Code Playgroud)

问题是我尝试连接的服务器只接受这些密码:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
Run Code Online (Sandbox Code Playgroud)

我无法在此处发布我尝试连接的服务器,但我尝试在 github 存储库上复制该问题。我找不到只接受这些密码套件的服务器,这就是为什么我的 repo 因另一个错误而失败。

git clone https://github.com/andreicristianpetcu/gcm_with_bc_onjdk17
cd gcm_with_bc_onjdk17
JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre" mvn clean install
Run Code Online (Sandbox Code Playgroud)

基本上这是来自 GitHub 的代码

    package com.github.gcm_with_bc_onjdk17;

    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.ssl.SSLContexts;

    import javax.crypto.Cipher;
    import javax.crypto.NoSuchPaddingException;
    import javax.net.ssl.SSLContext;
    import java.io.IOException;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.NoSuchProviderException;
    import …
Run Code Online (Sandbox Code Playgroud)

encryption ssl bouncycastle java-7 aes-gcm

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

如何从 PEM 文件中读取 RSA 公钥并使用它在 C# 中的 BouncyCastle 中进行加密?

C# BouncyCastle 包含一个名为 Org.BouncyCastle.Utilities.IO.Pem.PemReader 的类,该类似乎采用 PEM 格式的 RSA 公钥文件。我查看了这个链接:how can I conversion pem public key to rsa public key with bouncycastle in c#?

但它似乎在 PemReader 上使用了不存在的方法,称为 ReadObject。所以我改为编写以下代码。

var pemReader = new PemReader(File.OpenText(@"...rsa public key file path ..."));
var pemObject = pemReader.ReadPemObject();
var rsaPublicKeyBytes = pemObject.Content;
Run Code Online (Sandbox Code Playgroud)

一旦我获得 RSA 公共字节,我不知道如何进一步进行。我希望能够执行以下操作:

var rsaCipher = new RsaEngine();
var oaepEncoding = new OaepEncoding(rsaCipher, new Sha256Digest());
var publicKey = new RsaKeyParameters(...);
oaepEncoding.Init(true, publicKey);
var actualEncryptedBytes = oaepEncoding.ProcessBlock(plainBytes, 0, plainBytes.Length);
Run Code Online (Sandbox Code Playgroud)

我想我不确定如何使用 RSA 公共字节构造 RsaKeyParameters。有人能指出我正确的方向吗?或者我在这里完全走错路了?

c# cryptography rsa bouncycastle .net-core

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

Bouncy Castle - 如何从 JceOpenSSLPKCS8DecryptorProviderBuilder 获取公钥信息

我有以下代码来提取私钥

    PEMParser parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(decoded)));
    Object object = parser.readObject();
    PEMDecryptorProvider provider = new JcePEMDecryptorProviderBuilder()
            .build(props.getProperty(KeytoolFlags.KEYPASS.name()).toCharArray());

    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BouncyCastleProvider.PROVIDER_NAME);
    if (object instanceof PEMEncryptedKeyPair) {
        KeyPair pair = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(provider));
        return loadPublic ? pair.getPublic() : pair.getPrivate();
    } else if (object instanceof PEMKeyPair) {
        return loadPublic ? converter.getPublicKey(((PEMKeyPair) (object)).getPublicKeyInfo())
                : converter.getPrivateKey(((PEMKeyPair) (object)).getPrivateKeyInfo());
    } else {
        InputDecryptorProvider p2 = new JceOpenSSLPKCS8DecryptorProviderBuilder()
                .setProvider(BouncyCastleProvider.PROVIDER_NAME)
                .build(props.getProperty(KeytoolFlags.KEYPASS.name()).toCharArray());
        return converter.getPrivateKey(((PKCS8EncryptedPrivateKeyInfo) object).decryptPrivateKeyInfo(p2));
    }
Run Code Online (Sandbox Code Playgroud)

我想从转换器获取公钥JceOpenSSLPKCS8DecryptorProviderBuilder。有什么办法吗?

谢谢,

java bouncycastle public-key

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

BouncyCastle - 将 X509CrlEntry.SerialNumber 转换为“CAPI 样式”十六进制字符串

我正在尝试使用 Org.BouncyCastle.X509 转储证书吊销列表(CRL)的内容。在此用例中,我需要获取“十六进制”字符串表示形式的证书序列号列表,正如它们出现在证书 MMC 管理单元中一样(示例值为16a03c2c000000000594)。

\n\n

我能够达到这样的程度:我有一个 X509CRLEntry 对象的集合可供迭代,但SerialNumber属性的类型为Org.BouncyCastle.Math.BigInteger这种类型有一个ToString()的实现,但是,返回的值对我来说不可用:

\n\n
public CRLProc(string CRLFile)\n        {\n            X509CrlParser Parser = new X509CrlParser();\n            X509Crl CRL = Parser.ReadCrl(File.ReadAllBytes(CRLFile));\n            NextUpdate = CRL.NextUpdate.Value;\n            var RevokedCerts = CRL.GetRevokedCertificates();\n\n            foreach(X509CrlEntry entry in RevokedCerts)\n            {\n                //Target value (first SN in CRL): 16a03c2c000000000594\n\n                string serialNumber = entry.SerialNumber.ToString();\n                //serialNumber = "106847877515466973906324" (Nope)\n\n                string serialFromBytes = Encoding.Default.GetString(entry.SerialNumber.ToByteArray());\n                //serialFromBytes = "\\u0016\xc2\xa0<,\\0\\0\\0\\0\\u0005\xe2\x80\x9d" (That\'s a hard NO)\n\n                string serialFromBigInt = entry.SerialNumber.LongValue.ToString("X");\n                //serialFromBigInt = "3C2C000000000594" (OK, now we\'re getting …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle

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

使用 iText7 和 Vb.Net 签署 Pdf 时出现 MissingMethodException

我正在尝试测试转换为 Vb.Net 的 iText 文档示例,但是在执行 pdfSigner.SignDetached(...) 时,我遇到了下一个奇怪的异常

MissingMethodException:'System.Collections.IEnumerator Org.BouncyCastle.Asn1.Asn1Sequence.GetObjects()'

代码成功读取 pfx 证书和源文件,并创建目标文件,但在最后一步失败,导致目标文件损坏:

Imports System.IO
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.X509
Imports iText.Kernel.Geom
Imports iText.Kernel.Pdf
Imports iText.Signatures
Imports Org.BouncyCastle.Pkcs

Public Class SignHelloWorld
        Public Shared ReadOnly root As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\tmp\itext7\"
        Public Shared ReadOnly DEST As String = root & "results\signatures\chapter01\"
        Public Shared ReadOnly KEYSTORE As String = root & "resources\encryption\myCert.pfx"
        Public Shared ReadOnly SRC As String = root & "resources\pdfs\hello.pdf"
        Public Shared ReadOnly PASSWORD As Char() = "1234".ToCharArray()
        Public Shared ReadOnly …
Run Code Online (Sandbox Code Playgroud)

vb.net bouncycastle itext

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

检查我的数学:bouncycastle 问题:2 个不相等的密码被视为相等的几率

这是BouncyCastle 的 OpenBSD BCrypt 实现 v1.66 版本的“检查哈希值是否相等”代码:

for (int i = 0; i != sLength; i++){
  isEqual &= (bcryptString.indexOf(i) == newBcryptString.indexOf(i));
}
Run Code Online (Sandbox Code Playgroud)

其中sLength保证为 60(参见第 268 行),并且 bcryptString 是完整的 openbsd 风格的 bcrypt 字符串,例如$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a.

错误在于所使用的方法:他们打算使用charAt.

此循环的目的是检查从 0 到 59 的每个位置,位置iin的字符是否与位置ina的字符相同。ib

但是,由于错误使用indexOf(int), 相反,这会检查unicode in的第一个字符的位置是否与 unicode in的第一个字符的位置匹配,其中 'not in string' 匹配 'not in string'iaib

示例:"Hello".indexOf(101)返回1(java是从0开始的,101是unicode的ee是第二个字符)。 …

java algorithm math cryptography bouncycastle

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

Curve25519公钥是309字节,私钥是587,不应该是32字节吗?

我正在尝试使用 bouncycastle 在我的 java 程序中实现 curve25519,这是我想出的代码:

package crypto;

import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.ec.CustomNamedCurves;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jce.spec.ECParameterSpec;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.*;

public class Curve {

    public KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
        X9ECParameters ecP = CustomNamedCurves.getByName("curve25519");
        ECParameterSpec ecSpec = new ECParameterSpec(ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed());
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());
        keyGen.initialize(ecSpec);
        return keyGen.generateKeyPair();
    }

}
Run Code Online (Sandbox Code Playgroud)

而我的主要方法:

package crypto;

import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class Test_Curve {

    public static …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle diffie-hellman public-key

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