簡體   English   中英

RSA簽名Java到C#

[英]RSA signature Java to C#

我有一個創建簽名的工具。 我正在尋找 dot net core 2.1 中的等效代碼。

Java 代碼:sign(currentdate,'some text','SHA1WithRSA')

public String sign(String date, String subjectId, String algorithm){
    Signature rsa = Signature.getInstance(algorithm);
    rsa.initSign(this.getPrivate());
    rsa.update(subjectId.getBytes());
    rsa.update(date.getBytes());
    String signature = new String(Base64.getEncoder().encode(rsa.sign()));
    return signature;
}

public PrivateKey getPrivate() {
    String privateKeyPEM = "<This is the private key string";

    byte[] encoded = Base64.getDecoder().decode(privateKeyPEM);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(encoded);
    return kf.generatePrivate(spec);
}

建議使用或不使用 3rd 方工具為上述生成 dot net core 2.1 等效代碼的方法。

這對我來說是使用Portable.BouncyCastle庫的工作。

 private string GetSign(string data)
        {
            using (var rsa = new RSACryptoServiceProvider())
            {
                var privateKey = new StringBuilder();
                privateKey.AppendLine("-----BEGIN RSA PRIVATE KEY-----");
                privateKey.AppendLine("private key as string");
                privateKey.AppendLine("-----END RSA PRIVATE KEY-----");

                var pem = new PemReader(new StringReader(privateKey.ToString()));
                var keyPair = (AsymmetricCipherKeyPair)pem.ReadObject();
                var privateKeyParameters = (RsaPrivateCrtKeyParameters)keyPair.Private;
                var rsaParameters = DotNetUtilities.ToRSAParameters(privateKeyParameters);

                rsa.ImportParameters(rsaParameters);
                var sign = rsa.SignData(Encoding.UTF8.GetBytes(data), new HashAlgorithmName("SHA1") /*pass your algorithm*/,
                    RSASignaturePadding.Pkcs1);

                return Convert.ToBase64String(sign);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM