当前正在学习有关从Windows存储读取证书的信息。 然后使用私钥和公钥对字符串加密然后解密。
我的商店中有一个证书,上面已分配了公钥和私钥。
我正在使用
阅读公钥 X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 certificate in store.Certificates)
{
//TODO's
byte[] encodedPublicKey = certificate.PublicKey.EncodedKeyValue.RawData;
File.WriteAllLines(filePath, new[] {
"-----BEGIN PUBLIC KEY-----",
Convert.ToBase64String(encodedPublicKey, Base64FormattingOptions.InsertLineBreaks),
"-----END PUBLIC KEY-----"
});
publicKey = System.IO.File.ReadAllText(filePath);
encryptedWithPublic = encryption.EncryptWithPublic(input, publicKey);
}
store.Close();
我然后调用此方法进行加密
var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(publicKey))
{
var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
encryptEngine.Init(true, keyParameter);
}
var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
return encrypted;
注意-当我创建自己的公共密钥时,上述方法有效,但是当我使用密钥库中的公共密钥时,它就会掉入
其他信息:GetInstance中的未知对象: Org.BouncyCastle.Asn1.DerInteger
很明显,当我从商店中读取内容时,我做错了事,但是在此问题上,我没有找到任何帮助