使用 RSA 签署文档
Sign document using RSA
我在阅读这篇文章之前和之后都没有做过任何类似的事情,我仍然不确定如何取得进展。
我有一个使用密码保护的 RSA 私钥,以文本形式存储在本地数据库中,这是我的第一个问题,如何获取原始 RSA 私钥。
第二部分,涉及签署文件。基本上我有以下我必须实现的方法签名:
string GenerateDocumentSignature(string privateKey, string password, string documentId)
所以在这个方法中我将不得不反转私钥然后应用 RSA 加密。
你们能说明一下如何存档吗?谢谢
我能够使用 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();
}
}
我在阅读这篇文章之前和之后都没有做过任何类似的事情,我仍然不确定如何取得进展。
我有一个使用密码保护的 RSA 私钥,以文本形式存储在本地数据库中,这是我的第一个问题,如何获取原始 RSA 私钥。
第二部分,涉及签署文件。基本上我有以下我必须实现的方法签名:
string GenerateDocumentSignature(string privateKey, string password, string documentId)
所以在这个方法中我将不得不反转私钥然后应用 RSA 加密。
你们能说明一下如何存档吗?谢谢
我能够使用 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();
}
}