使用RSA签署文档

时间:2016-12-13 11:27:57

标签: c# encryption rsa sha1 private-key

在阅读之前和之后我没有做过类似的事情,我仍然不确定如何进步。

我有一个使用密码保护的RSA私钥,在本地数据库中以文本形式存储,这是我的第一个问题,如何获取原始RSA私钥。

第二部分涉及签署文件。基本上我有以下方法签名,我必须实现:

string GenerateDocumentSignature(string privateKey, string password, string documentId)

因此,在这种方法中,我将必须反转私钥,然后应用RSA加密。

你们能否阐明如何归档这个?感谢

1 个答案:

答案 0 :(得分:1)

我能够使用BouncyCastle让它工作:

public class SignDocsProvider : ISignDocsProvider
{
    public string GenerateSignature(string privateKey, string password, string documentId)
    {
        var keyPair = ReadPrivateKey(privateKey, password);
        var sha1Digest = new Sha1Digest();
        var rsaDigestSigner = new RsaDigestSigner(sha1Digest);

        rsaDigestSigner.Init(true, keyPair);

        var documentIdToSign = Encoding.ASCII.GetBytes(documentId);

        rsaDigestSigner.BlockUpdate(documentIdToSign, 0, documentIdToSign.Length);

        return Convert.ToBase64String(rsaDigestSigner.GenerateSignature());
    }

    private static AsymmetricKeyParameter ReadPrivateKey(string privateKey, string password)
    {
        AsymmetricCipherKeyPair keyPair;

        using (var reader = new StringReader(privateKey))
            keyPair = (AsymmetricCipherKeyPair)new PemReader(reader, new PasswordFinder(password)).ReadObject();

        return keyPair.Private;
    }
}

internal class PasswordFinder : IPasswordFinder
{
    private readonly string _password;


    public PasswordFinder(string password)
    {
        _password = password;
    }


    public char[] GetPassword()
    {
        return _password.ToCharArray();
    }
}