Alu*_*ium 3 c# encryption pfx x509certificate2 x509certificate
我的计算机上有一个.pfx证书文件.我想用其公钥加密消息,然后使用私钥解密.
此外,我想用其私钥签署另一条消息,然后检查签名.我需要从该消息中获取有关该消息已签名的sertificate的信息.
我怎么能用System.Security.Cryptography来做呢?
Tim*_*nem 11
您可以在.NET中打开PFX,如下所示:
var path = <YOUR PFX FILE PATH>;
var password = <YOUR PASSWORD>;
var collection = new X509Certificate2Collection();
collection.Import(path, password, X509KeyStorageFlags.PersistKeySet);
Run Code Online (Sandbox Code Playgroud)
然后,列举一下X509Certificate2Collection.获得证书后(假设有一个证书),则:
var certificate = collection[0];
Run Code Online (Sandbox Code Playgroud)
要加密数据,您可以使用:
var publicKey = certificate.PublicKey.Key as RSACryptoServiceProvider;
var encryptedData = publicKey.Encrypt(<yourdata>, false);
Run Code Online (Sandbox Code Playgroud)
在这里,我没有使用OAEP加密,但你可以通过设置第二个参数的fOAEPto 来使用它true.
要解密数据,您可以使用:
var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
var data = privateKey.Decrypt(encryptedData, false);
Run Code Online (Sandbox Code Playgroud)
PFX中的证书可能没有相应的私钥,因此您可以在访问该PrivateKey属性之前使用以下属性检查私钥是否存在
if (!certificate.HasPrivateKey)
throw new Exception("The certificate does not have a private key");
Run Code Online (Sandbox Code Playgroud)
如果您已加密OAEP,则必须使用fOAEPset to 解密true.
要签署数据,您可以使用:
var signature = privateKey.SignData(<yourdata>, "SHA1");
Run Code Online (Sandbox Code Playgroud)
要验证签名,您可以使用:
var isValid = publicKey.VerifyData(<yourdata>, "SHA1", signature);
Run Code Online (Sandbox Code Playgroud)
在这里,我使用SHA1的不被认为是强大的.您可以使用SHA256更强大的其他散列算法.
最后,如果你的消息是一个小字符串,那么前一个程序就可以了.但是,如果您正在加密大数据,那么我建议您使用对称加密,然后使用公钥加密对称密钥.(有关完整示例,请参阅X509Certificate2类.)
| 归档时间: |
|
| 查看次数: |
9099 次 |
| 最近记录: |