/* makecert.exe -n "CN=Microshaoft X509 Test - A" -sky exchange -pe -sv a.pvk a.cer pvk2pfx.exe -pvk a.pvk -spc a.cer -pfx a.pfx -f -po 123 makecert.exe -n "CN=Microshaoft X509 Test - B" -sky exchange -pe -sv b.pvk b.cer pvk2pfx.exe -pvk b.pvk -spc b.cer -pfx b.pfx -f -po abc */ namespace ConsoleApplication { using System; using System.IO; using System.Text; using System.Threading; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; public class Class1 { static void Main(string[] args) { encryptorPrivateKeyPfxProvider = encryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider; encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider; decryptorPublicKeyCerProvider = decryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider; decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider; for (int i = 0 ; i < 2000 ; i++) { ThreadStart ts = new ThreadStart(Run); Thread t = new Thread(ts); t.Name = _ThreadID.ToString(); _ThreadID ++; t.Start(); //Run(); } } private static volatile int _ThreadID = 0; private static object _syncLockObject = new object(); private static X509Certificate2 encryptorPrivateKeyPfx = new X509Certificate2(@"a.pfx", "123"); private static X509Certificate2 encryptorPublicKeyCer = new X509Certificate2(@"a.cer"); private static X509Certificate2 decryptorPublicKeyCer = new X509Certificate2(@"b.cer"); private static X509Certificate2 decryptorPrivateKeyPfx = new X509Certificate2(@"b.pfx", "abc"); private static RSACryptoServiceProvider encryptorPrivateKeyPfxProvider = null; private static RSACryptoServiceProvider encryptorPublicKeyCerProvider = null; private static RSACryptoServiceProvider decryptorPublicKeyCerProvider = null; private static RSACryptoServiceProvider decryptorPrivateKeyPfxProvider = null; static void Run() { // // TODO: 在此处添加代码以启动应用程序 // string s = "原明文原明文原明文原明文原明文原明文原明文原明文原明文"; byte[] data = Encoding.UTF8.GetBytes(s); byte[] signature; bool DoOAEPadding = false; bool verifyed = false; /// X509Certificate2 encryptorPrivateKeyPfx = null; /// X509Certificate2 encryptorPublicKeyCer = null; /// X509Certificate2 decryptorPublicKeyCer = null; /// X509Certificate2 decryptorPrivateKeyPfx = null; try { /// encryptorPrivateKeyPfx = new X509Certificate2(@"a.pfx", "123"); /// encryptorPublicKeyCer = new X509Certificate2(@"a.cer"); /// decryptorPublicKeyCer = new X509Certificate2(@"b.cer"); /// decryptorPrivateKeyPfx = new X509Certificate2(@"b.pfx", "abc"); //using (RSACryptoServiceProvider decryptorPublicKeyCerProvider = decryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider) { //加密 data = decryptorPublicKeyCerProvider.Encrypt(data, DoOAEPadding); } byte[] hash = new SHA1CryptoServiceProvider().ComputeHash(data); //using (RSACryptoServiceProvider encryptorPrivateKeyPfxProvider = encryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider) { //签名 signature = encryptorPrivateKeyPfxProvider.SignHash(hash, "SHA1"); } //using (RSACryptoServiceProvider encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider) { //验签 verifyed = encryptorPublicKeyCerProvider.VerifyHash(hash, "SHA1", signature); } //using (RSACryptoServiceProvider decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider) { //解密 data = decryptorPrivateKeyPfxProvider.Decrypt(data, DoOAEPadding); } s = Encoding.UTF8.GetString(data); Console.WriteLine("{0},{1},{2}", Thread.CurrentThread.Name, verifyed, s); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { /// if (encryptorPrivateKeyPfx != null) /// { /// encryptorPrivateKeyPfx.Reset(); /// } /// if (encryptorPublicKeyCer != null) /// { /// encryptorPublicKeyCer.Reset(); /// } /// if (decryptorPublicKeyCer != null) /// { /// decryptorPublicKeyCer.Reset(); /// } } } } }