http://www.bouncycastle.org/csharp/index.html
下載bin的zip文件。
工程添加引用“BouncyCastle.Crypto.dll”
代碼添加引用:
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Parameters;
簽名&讀證書序列號:
FileStream fileStream = null; try { fileStream = new FileStream(certPath, FileMode.Open); Pkcs12Store store = new Pkcs12Store(fileStream, certPwd.ToCharArray()); string pName = null; foreach (string n in store.Aliases) { if (store.IsKeyEntry(n)) { pName = n; //break; } } Cert signCert = new Cert(); AsymmetricKeyParameter key = store.GetKey(pName).Key; X509CertificateEntry[] chain = store.GetCertificateChain(pName); X509Certificate cert = chain[0].Certificate; string certId = cert.SerialNumber.ToString(); //證書序列號 ISigner normalSig = SignerUtilities.GetSigner("SHA1WithRSA"); normalSig.Init(true, key); normalSig.Blockupdate(data, 0, data.Length); byte[] normalResult = normalSig.GenerateSignature(); //簽名結果 } finally { if (fileStream != null) fileStream.Close(); }
驗簽&讀證書序列號:
FileStream fileStream = null; try { fileStream = new FileStream(file.DirectoryName + "\\" + file.Name, FileMode.Open); X509Certificate certificate = new X509CertificateParser().ReadCertificate(fileStream); string certId = certificate.SerialNumber.ToString(); //證書序列號 AsymmetricKeyParameter key = certificate.GetPublicKey(); ISigner verifier = SignerUtilities.GetSigner("SHA1WithRSA"); verifier.Init(false, key); verifier.BlockUpdate(srcByte, 0, srcByte.Length); return verifier.VerifySignature(signature); //驗簽結果 } finally { if(fileStream != null) fileStream.Close(); }
加密:
FileStream fileStream = null; try { fileStream = new FileStream(file.DirectoryName + "\\" + file.Name, FileMode.Open); X509Certificate certificate = new X509CertificateParser().ReadCertificate(fileStream); string certId = certificate.SerialNumber.ToString(); //證書序列號 AsymmetricKeyParameter key = certificate.GetPublicKey(); IBufferedCipher c = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding"); c.Init(true, new ParametersWithRandom(key, new SecureRandom())); return c.DoFinal(dataToBeEnc); //加密結果 } finally { if(fileStream != null) fileStream.Close(); }
Tags: 序列號 store null .net 工程
文章來源: