【问题标题】:Sign string with SHA1RSA and existing rsa private key c#使用 SHA1RSA 和现有 rsa 私钥 c# 签署字符串
【发布时间】:2018-11-19 12:58:04
【问题描述】:

我有一个 rsa 私钥,我想用它签署数据。我写了这段代码,但它不起作用:

public string Sign(string text)
{
    var sha = new SHA1Managed();
    var encoding = new UTF8Encoding();
    var bytes = encoding.GetBytes(text);
    var digest = sha.ComputeHash(bytes);

    var cert = new X509Certificate2(Convert.FromBase64String(PermissionKey));
    var rsa = (RSACryptoServiceProvider)cert.PrivateKey;
    var rsaFormatter = new RSAPKCS1SignatureFormatter(rsa);
    rsaFormatter.SetHashAlgorithm("SHA1");

    var SignedHashValue = rsa.SignData(digest, sha);
    return Convert.ToBase64String(SignedHashValue).Replace("=", "") + "\n";
}

我得到了这个异常:

'Cannot find the requested object. 

当我尝试创建 X509Certificate2 时:

var cert = new X509Certificate2(Convert.FromBase64String(PermissionKey));

PS: 我厌倦了在 C# 中模拟 android 代码。这是主要的android:

public static PrivateKey makePrivateKeyFromPermissionKey(String permissionKey)
        throws InvalidKeySpecException, NoSuchProviderException, NoSuchAlgorithmException {
    KeyFactory keyFactory;
    byte[] certificate = decode(
            permissionKey
                    .replaceAll("\\n", "")
                    .replace("-----BEGIN RSA PRIVATE KEY-----", "")
                    .replace("-----END RSA PRIVATE KEY-----", "")
    );
    if (Build.VERSION.SDK_INT < 27) {
        keyFactory = KeyFactory.getInstance("RSA", "BC");
    } else {
        keyFactory = KeyFactory.getInstance("RSA");
    }
    return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(certificate));
}

【问题讨论】:

标签: c# android cryptography rsa sign


【解决方案1】:

我找到了答案。我使用CSharp_easy_RSA_PEM 库来读取私钥。

public static string Sign(string text)
{
    var privateRSAkey = Crypto.DecodeRsaPrivateKey(PermissionKey);
    var rsa = privateRSAkey;

    var hasher = new SHA1CryptoServiceProvider();
    var e = new UTF8Encoding(true);
    var bytesFirmados = rsa.SignData(e.GetBytes(text), hasher);

    return Convert.ToBase64String(bytesFirmados);
}

【讨论】:

  • 嗨,什么是(PermissionKey)?
  • 嗨。我从密钥文件中提取的私钥值。
猜你喜欢
  • 1970-01-01
  • 2014-12-17
  • 2023-04-02
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2017-09-08
相关资源
最近更新 更多