小编bar*_*njs的帖子

从.NET Core中的PEM文件创建X509Certificate2

我想基于PEM文件创建X509Certificate2对象。问题是设置X509Certificate2的PrivateKey属性。我在.NET Core上阅读X509Certificate2.CreateFromCertFile() ,然后使用

var rsa = new RSACryptoServiceProvider();

rsa.ImportCspBlob(pvk);
Run Code Online (Sandbox Code Playgroud)

pvk私钥的字节数组在哪里(从GetBytesFromPEM读取,如此处所示,如何从PEM文件获取私钥?)来设置私钥,但随后我得到了一个

Internal.Cryptography.CryptoThrowHelper + WindowsCryptographicException,带有消息提供程序错误版本。

如何根据PEM文件中的私钥正确设置X509Certificate2的私钥?

如果我看创建X509Certificate2,他们使用

 RSACryptoServiceProvider prov = Crypto.DecodeRsaPrivateKey(keyBuffer);
 certificate.PrivateKey = prov;
Run Code Online (Sandbox Code Playgroud)

这似乎是一种整洁的方法,但这在.Net Core中不起作用...

c# pem x509certificate .net-core private-key

7
推荐指数
2
解决办法
4346
查看次数

在 Java 中使用模数和指数的 RSA 加密

我目前正在 Java 上进行 RSA 加密,我必须使用私有和公共模数进行加密。我目前有以下几点:

private void createPublicKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
        String publicModulus = "d2c34017ef94f8ab6696dae66e3c0d1ad186bbd9ce4461b68d7cd017c15bda174045bfef36fbf048" +
                "73cfd6d09e3806af3949f99c3e09d6d3c37f6398d8c63f9a3e39b78a187809822e8bcf912f4c44a8" +
                "92fe6a65a477ddea9582738317317286a2610ba30b6b090c3b8c61ffb64207229b3f01afe928a960" +
                "c5a44c24b26f5f91";

        BigInteger keyInt = new BigInteger(publicModulus, 16);
        BigInteger exponentInt = new BigInteger("10001", 16);
        RSAPublicKeySpec keySpeck = new RSAPublicKeySpec(keyInt, exponentInt);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        publicKey = keyFactory.generatePublic(keySpeck);

    }

private void createPrivateKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
        String privateModulus = "6c97ab6369cf00dd174bacd7c37e6f661d04e5af10670d4d88d30148ec188e63227b8dac0c517cf9" +
                "67aa73cd23684c9165dc269f091bfab33b6c5c7db95b54130e348255c30aaaac1c7f09ef701e0d6f" +
                "6dc142d2e4ed78466cc104e28d50be7adf3863afc021dbdd8b5f0b968b7cd965242c7d8d4b32ee84" +
                "0fac3cad134344c1";
        BigInteger privateModulusInt = new BigInteger(privateModulus, 16);
        BigInteger exponentInt = new BigInteger("10001", 16);
        RSAPrivateKeySpec privateKeySpec = …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography rsa

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

如何在 Linux 和 MacOS 上导入 PKCS#8 - CngKey.Import 不可用

我正在尝试使用 HTTP/2 APNS 发送 Apple 推送通知。为此,我需要使用证书和加密。我创建 JWT 令牌的代码:

private string CreateJwtToken()
{
    var header = JsonHelper.Serialize(new { alg = "ES256", kid = p8privateKeyId });
    var payload = JsonHelper.Serialize(new { iss = teamId, iat = ToEpoch(DateTime.UtcNow) });

    var key = CngKey.Import(Convert.FromBase64String(p8privateKey), CngKeyBlobFormat.Pkcs8PrivateBlob);
    using (var dsa = new ECDsaCng(key))
    {
        dsa.HashAlgorithm = CngAlgorithm.Sha256;
        var headerBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(header));
        var payloadBasae64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(payload));
        var unsignedJwtData = $"{headerBase64}.{payloadBasae64}";
        var signature = dsa.SignData(Encoding.UTF8.GetBytes(unsignedJwtData));
        return $"{unsignedJwtData}.{Convert.ToBase64String(signature)}";
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这在 Windows 上运行良好,CngKey.Import但在 Linux 和 MacOS 上不受支持。如何重写此代码以使其跨平台?

.net c# jwt cng .net-core

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

为什么我们需要在stringbuilder中使用toString方法

6号线和8号线有什么区别?它们都打印相同的字符串。为什么我们需要在StringBuilder中使用toString。

     StringBuilder s = new StringBuilder("hello");//line1
     System.out.println(s);//line2
     s.append("hi");//line3
     System.out.println(s);
     s.append("okk");
     System.out.println(s);//line 6
     s.toString();
     System.out.println(s);//line 8
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder

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