.net用BouncyCastle進行簽名&加解密

分類:編程 時間:2016-11-06
[摘要:http://www.bouncycastle.org/csharp/index.html 下載bin的zip文件。 工程增加援用“BouncyCastle.Crypto.dll” 代碼增加援用: using Org.BouncyCastle.Pkcs; using O]



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 工程

文章來源:


ads
ads

相關文章
ads

相關文章

ad