亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#創建自簽名認證文件的方法

2020-01-24 01:37:25
字體:
來源:轉載
供稿:網友

本文實例講述了C#創建自簽名認證文件的方法。分享給大家供大家參考。具體如下:

using System;using System.Runtime.InteropServices;using System.Security.Cryptography.X509Certificates;using SecureString = System.Security.SecureString;using RuntimeHelpers = System.Runtime.CompilerServices.RuntimeHelpers;internal class Certificate{ public static byte[] CreateSelfSignCertificatePfx(  string x500,  DateTime startTime,  DateTime endTime) {  byte[] pfxData = CreateSelfSignCertificatePfx(   x500,   startTime,   endTime,   (SecureString)null);  return pfxData; } public static byte[] CreateSelfSignCertificatePfx(  string x500,  DateTime startTime,  DateTime endTime,  string insecurePassword) {  byte[] pfxData;  SecureString password = null;  try  {   if (!string.IsNullOrEmpty(insecurePassword))   {    password = new SecureString();    foreach (char ch in insecurePassword)    {     password.AppendChar(ch);    }    password.MakeReadOnly();   }   pfxData = CreateSelfSignCertificatePfx(    x500,    startTime,    endTime,    password);  }  finally  {   if (password != null)   {    password.Dispose();   }  }  return pfxData; } public static byte[] CreateSelfSignCertificatePfx(  string x500,  DateTime startTime,  DateTime endTime,  SecureString password) {  byte[] pfxData;  if (x500 == null)  {   x500 = "";  }  SystemTime startSystemTime = ToSystemTime(startTime);  SystemTime endSystemTime = ToSystemTime(endTime);  string containerName = Guid.NewGuid().ToString();  GCHandle dataHandle = new GCHandle();  IntPtr providerContext = IntPtr.Zero;  IntPtr cryptKey = IntPtr.Zero;  IntPtr certContext = IntPtr.Zero;  IntPtr certStore = IntPtr.Zero;  IntPtr storeCertContext = IntPtr.Zero;  IntPtr passwordPtr = IntPtr.Zero;  RuntimeHelpers.PrepareConstrainedRegions();  try  {   Check(NativeMethods.CryptAcquireContextW(    out providerContext,    containerName,    null,    1, // PROV_RSA_FULL    8)); // CRYPT_NEWKEYSET   Check(NativeMethods.CryptGenKey(    providerContext,    1, // AT_KEYEXCHANGE    1, // CRYPT_EXPORTABLE    out cryptKey));   IntPtr errorStringPtr;   int nameDataLength = 0;   byte[] nameData;   // errorStringPtr gets a pointer into the middle of the x500 string,   // so x500 needs to be pinned until after we've copied the value   // of errorStringPtr.   dataHandle = GCHandle.Alloc(x500, GCHandleType.Pinned);   if (!NativeMethods.CertStrToNameW(    0x00010001, // X509_ASN_ENCODING | PKCS_7_ASN_ENCODING    dataHandle.AddrOfPinnedObject(),    3, // CERT_X500_NAME_STR = 3    IntPtr.Zero,    null,    ref nameDataLength,    out errorStringPtr))   {    string error = Marshal.PtrToStringUni(errorStringPtr);    throw new ArgumentException(error);   }   nameData = new byte[nameDataLength];   if (!NativeMethods.CertStrToNameW(    0x00010001, // X509_ASN_ENCODING | PKCS_7_ASN_ENCODING    dataHandle.AddrOfPinnedObject(),    3, // CERT_X500_NAME_STR = 3    IntPtr.Zero,    nameData,    ref nameDataLength,    out errorStringPtr))   {    string error = Marshal.PtrToStringUni(errorStringPtr);    throw new ArgumentException(error);   }   dataHandle.Free();   dataHandle = GCHandle.Alloc(nameData, GCHandleType.Pinned);   CryptoApiBlob nameBlob = new CryptoApiBlob(    nameData.Length,    dataHandle.AddrOfPinnedObject());   CryptKeyProviderInformation kpi = new CryptKeyProviderInformation();   kpi.ContainerName = containerName;   kpi.ProviderType = 1; // PROV_RSA_FULL   kpi.KeySpec = 1; // AT_KEYEXCHANGE   certContext = NativeMethods.CertCreateSelfSignCertificate(    providerContext,    ref nameBlob,    0,    ref kpi,    IntPtr.Zero, // default = SHA1RSA    ref startSystemTime,    ref endSystemTime,    IntPtr.Zero);   Check(certContext != IntPtr.Zero);   dataHandle.Free();   certStore = NativeMethods.CertOpenStore(    "Memory", // sz_CERT_STORE_PROV_MEMORY    0,    IntPtr.Zero,    0x2000, // CERT_STORE_CREATE_NEW_FLAG    IntPtr.Zero);   Check(certStore != IntPtr.Zero);   Check(NativeMethods.CertAddCertificateContextToStore(    certStore,    certContext,    1, // CERT_STORE_ADD_NEW    out storeCertContext));   NativeMethods.CertSetCertificateContextProperty(    storeCertContext,    2, // CERT_KEY_PROV_INFO_PROP_ID    0,    ref kpi);   if (password != null)   {    passwordPtr = Marshal.SecureStringToCoTaskMemUnicode(password);   }   CryptoApiBlob pfxBlob = new CryptoApiBlob();   Check(NativeMethods.PFXExportCertStoreEx(    certStore,    ref pfxBlob,    passwordPtr,    IntPtr.Zero,    7)); // EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY   pfxData = new byte[pfxBlob.DataLength];   dataHandle = GCHandle.Alloc(pfxData, GCHandleType.Pinned);   pfxBlob.Data = dataHandle.AddrOfPinnedObject();   Check(NativeMethods.PFXExportCertStoreEx(    certStore,    ref pfxBlob,    passwordPtr,    IntPtr.Zero,    7)); // EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY   dataHandle.Free();  }  finally  {   if (passwordPtr != IntPtr.Zero)   {    Marshal.ZeroFreeCoTaskMemUnicode(passwordPtr);   }   if (dataHandle.IsAllocated)   {    dataHandle.Free();   }   if (certContext != IntPtr.Zero)   {    NativeMethods.CertFreeCertificateContext(certContext);   }   if (storeCertContext != IntPtr.Zero)   {    NativeMethods.CertFreeCertificateContext(storeCertContext);   }   if (certStore != IntPtr.Zero)   {    NativeMethods.CertCloseStore(certStore, 0);   }   if (cryptKey != IntPtr.Zero)   {    NativeMethods.CryptDestroyKey(cryptKey);   }   if (providerContext != IntPtr.Zero)   {    NativeMethods.CryptReleaseContext(providerContext, 0);    NativeMethods.CryptAcquireContextW(     out providerContext,     containerName,     null,     1, // PROV_RSA_FULL     0x10); // CRYPT_DELETEKEYSET   }  }  return pfxData; } private static SystemTime ToSystemTime(DateTime dateTime) {  long fileTime = dateTime.ToFileTime();  SystemTime systemTime;  Check(NativeMethods.FileTimeToSystemTime(ref fileTime, out systemTime));  return systemTime; } private static void Check(bool nativeCallSucceeded) {  if (!nativeCallSucceeded)  {   int error = Marshal.GetHRForLastWin32Error();   Marshal.ThrowExceptionForHR(error);  } } [StructLayout(LayoutKind.Sequential)] private struct SystemTime {  public short Year;  public short Month;  public short DayOfWeek;  public short Day;  public short Hour;  public short Minute;  public short Second;  public short Milliseconds; } [StructLayout(LayoutKind.Sequential)] private struct CryptoApiBlob {  public int DataLength;  public IntPtr Data;  public CryptoApiBlob(int dataLength, IntPtr data)  {   this.DataLength = dataLength;   this.Data = data;  } } [StructLayout(LayoutKind.Sequential)] private struct CryptKeyProviderInformation {  [MarshalAs(UnmanagedType.LPWStr)] public string ContainerName;  [MarshalAs(UnmanagedType.LPWStr)] public string ProviderName;  public int ProviderType;  public int Flags;  public int ProviderParameterCount;  public IntPtr ProviderParameters; // PCRYPT_KEY_PROV_PARAM  public int KeySpec; } private static class NativeMethods {  [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool FileTimeToSystemTime(   [In] ref long fileTime,   out SystemTime systemTime);  [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CryptAcquireContextW(   out IntPtr providerContext,   [MarshalAs(UnmanagedType.LPWStr)] string container,   [MarshalAs(UnmanagedType.LPWStr)] string provider,   int providerType,   int flags);  [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CryptReleaseContext(   IntPtr providerContext,   int flags);  [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CryptGenKey(   IntPtr providerContext,   int algorithmId,   int flags,   out IntPtr cryptKeyHandle);  [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CryptDestroyKey(   IntPtr cryptKeyHandle);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CertStrToNameW(   int certificateEncodingType,   IntPtr x500,   int strType,   IntPtr reserved,   [MarshalAs(UnmanagedType.LPArray)] [Out] byte[] encoded,   ref int encodedLength,   out IntPtr errorString);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  public static extern IntPtr CertCreateSelfSignCertificate(   IntPtr providerHandle,   [In] ref CryptoApiBlob subjectIssuerBlob,   int flags,   [In] ref CryptKeyProviderInformation keyProviderInformation,   IntPtr signatureAlgorithm,   [In] ref SystemTime startTime,   [In] ref SystemTime endTime,   IntPtr extensions);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CertFreeCertificateContext(   IntPtr certificateContext);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  public static extern IntPtr CertOpenStore(   [MarshalAs(UnmanagedType.LPStr)] string storeProvider,   int messageAndCertificateEncodingType,   IntPtr cryptProvHandle,   int flags,   IntPtr parameters);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CertCloseStore(   IntPtr certificateStoreHandle,   int flags);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CertAddCertificateContextToStore(   IntPtr certificateStoreHandle,   IntPtr certificateContext,   int addDisposition,   out IntPtr storeContextPtr);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool CertSetCertificateContextProperty(   IntPtr certificateContext,   int propertyId,   int flags,   [In] ref CryptKeyProviderInformation data);  [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]  [return: MarshalAs(UnmanagedType.Bool)]  public static extern bool PFXExportCertStoreEx(   IntPtr certificateStoreHandle,   ref CryptoApiBlob pfxBlob,   IntPtr password,   IntPtr reserved,   int flags); }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产免费一区二区三区在线观看| 韩国19禁主播vip福利视频| xxx欧美精品| 成人黄色在线播放| 92福利视频午夜1000合集在线观看| 91免费看片网站| 久久亚洲成人精品| 国产亚洲精品久久久久动| 亚洲国产美女精品久久久久∴| 亚洲精品99久久久久中文字幕| 精品国产91久久久久久| www.亚洲人.com| 日韩中文字幕网| 国产视频精品免费播放| 欧美激情精品久久久久久大尺度| 欧美又大又硬又粗bbbbb| 69av成年福利视频| 国产精品男人的天堂| 性欧美长视频免费观看不卡| 欧美性69xxxx肥| 亚洲国产精品久久久久秋霞蜜臀| 情事1991在线| 欧美极品在线视频| 国产精品香蕉在线观看| 久久视频免费观看| 国产精品电影久久久久电影网| 好吊成人免视频| 91亚洲精品在线观看| 91精品国产高清| 国产一区二区在线免费视频| 国产精品久久久久久一区二区| 成人国产亚洲精品a区天堂华泰| 亚洲级视频在线观看免费1级| 欧美激情免费视频| 国产精品久久久久久久久久三级| 欧美日韩在线第一页| yw.139尤物在线精品视频| 亚洲欧美国产日韩中文字幕| 久久久免费观看视频| 欧美激情一区二区三区在线视频观看| 日韩在线视频观看正片免费网站| 久久偷看各类女兵18女厕嘘嘘| www高清在线视频日韩欧美| 亚洲深夜福利网站| 97欧美精品一区二区三区| 欧美大荫蒂xxx| 亚洲国产91色在线| 国内精品视频一区| 久久精品亚洲一区| 欧美香蕉大胸在线视频观看| 一区二区欧美激情| 国产精品午夜国产小视频| 日韩欧美在线免费观看| 国产日韩精品一区二区| 久久久久久av| 欧美性理论片在线观看片免费| 日韩在线高清视频| 91香蕉国产在线观看| 18性欧美xxxⅹ性满足| 7777精品视频| 在线性视频日韩欧美| 日韩精品亚洲元码| 久久成人18免费网站| 久久久久久一区二区三区| 国产99视频精品免视看7| 欧美成人精品不卡视频在线观看| 欧美精品久久久久| 国产精品久久久久久久久免费看| 日韩中文综合网| 91精品免费久久久久久久久| 国内久久久精品| 美女av一区二区| 精品视频久久久久久久| 日韩av中文字幕在线免费观看| 亚洲欧美日韩国产成人| 成人在线免费观看视视频| 欧美日韩电影在线观看| 欧美高清视频在线观看| 精品国产老师黑色丝袜高跟鞋| 中文字幕日韩综合av| 中文在线不卡视频| 成人网中文字幕| 搡老女人一区二区三区视频tv| 成人做爽爽免费视频| 亚洲综合最新在线| 国产成人精品免费视频| 久久成人精品一区二区三区| 精品福利在线视频| 国产精品视频播放| 中文字幕一区二区精品| 日韩欧美高清在线视频| 亚洲va欧美va国产综合剧情| 久久久久久久久爱| 欧美人成在线视频| 亚洲成av人影院在线观看| 日韩精品亚洲视频| xxxx欧美18另类的高清| 97碰碰碰免费色视频| 亚洲美女av电影| 亚洲最新av在线| 伊人成人开心激情综合网| 亚洲电影第1页| 欧美精品在线第一页| 亚洲欧洲中文天堂| 国产成人一区二区三区电影| 亚洲国产成人久久综合一区| 亚洲国产精品久久久久久| 最近2019年日本中文免费字幕| 国内精品久久久久影院优| 亚洲欧美日韩精品久久奇米色影视| 亚洲wwwav| 日韩精品一区二区三区第95| 另类色图亚洲色图| 欧美日韩中文字幕在线视频| 欧美激情一级精品国产| 成人免费黄色网| 亚洲视频欧美视频| 国产精品激情av在线播放| 亚洲国产一区二区三区在线观看| 亚洲精品日韩激情在线电影| 疯狂蹂躏欧美一区二区精品| 亚洲跨种族黑人xxx| 亚洲国产欧美自拍| 中文字幕精品一区二区精品| 亚洲女同精品视频| 亚洲欧美精品一区| 欧美一级淫片aaaaaaa视频| 欧美成人精品影院| 亚洲free性xxxx护士hd| 成人h视频在线观看播放| 热门国产精品亚洲第一区在线| 国产日韩欧美自拍| 亚洲精品永久免费精品| 久久久免费精品| 国产中文字幕日韩| 国产精品成人国产乱一区| 欧美色图在线视频| 国产精品久久久久久久久| 97**国产露脸精品国产| 国产精品午夜国产小视频| 亚洲欧美日韩第一区| 国产欧美亚洲视频| 欧美日韩成人在线视频| 国产精品夜间视频香蕉| 精品国产一区二区三区久久久| 午夜精品久久久99热福利| 91理论片午午论夜理片久久| 亚洲免费精彩视频| 亚洲国产成人久久| 久久人91精品久久久久久不卡| 中文字幕亚洲综合久久| 美女啪啪无遮挡免费久久网站| 91精品91久久久久久| 亚洲欧洲第一视频| www.国产一区| 日韩成人在线观看| 最新亚洲国产精品| 久久躁狠狠躁夜夜爽| 国产亚洲aⅴaaaaaa毛片| 91精品国产高清久久久久久久久| 欧美在线视频一区| 久久久久久国产精品| 亚洲久久久久久久久久| 久久精品最新地址|