⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 storesh.cs

📁 CAPICOM安全代码,真麻烦还要字数限制!唉
💻 CS
📖 第 1 页 / 共 3 页
字号:
					} 
					catch (Exception e)
					{
						Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
					}
					break;
				case "i":
				case "import":
					try 
					{
						String filename = null;
						String password = null;
						CAPICOM_KEY_STORAGE_FLAG iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_DEFAULT;
						
						if (alArgs.Count >= 2)
						{
							filename = (String)alArgs[1];
						}
						if (alArgs.Count >= 3)
						{
							password = (String)alArgs[2];
						}
						if (alArgs.Count >= 4)
						{
							String flag = null;
							if (alArgs.Count == 4)
							{
								password = null;
								flag = (String)alArgs[3];
							}
							else if (alArgs.Count == 5)
							{
								flag = (String)alArgs[4];
							}
							if (flag.Equals ("e"))
							{
								iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_EXPORTABLE;
							} 
							else if (flag.Equals ("p"))
							{
								iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_USER_PROTECTED;
							}
							else if (flag.Equals ("ep") || flag.Equals ("pe"))
							{
								iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_USER_PROTECTED | CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_EXPORTABLE;
							}
						}
						_oCurrStore.Load(filename, password, iFlag);
					}
					catch (Exception e)
					{
						Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
					}
					break;
				case "p":
				case "pfxexport":
					try 
					{
						oCert = GetCertByIndex(Convert.ToInt32(alArgs[1]));
						if (oCert != null ) 
						{
							String filename =  (String)alArgs[2];
							String password =  (String)alArgs[3];
										
							if (filename != null)
							{
								oCert.Save(filename,
									password,
									CAPICOM_CERTIFICATE_SAVE_AS_TYPE.CAPICOM_CERTIFICATE_SAVE_AS_PFX,
									CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
							} 
							else
							{
								Console.WriteLine("No filename specified.");
							}
						}
						else
						{
							Console.WriteLine ("No certificate with that index (" + alArgs[1] + ") could be found.");
						}
					} 
					catch (Exception e)
					{
						Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
					}
					break;
				case "c":
                                case "create":
                                case "del":
                                        try
                                        {
                                                // Opening it is the same whether we're creating or deleting
                                                if (alArgs.Count == 1) {
                                                        Console.WriteLine ("Please enter a name for the store");
                                                        break;
                                                }
                                                String name = (String) alArgs[1];
                                                for (int i = 2; i < alArgs.Count; i++) {
                                                        name += " " + alArgs[i];
                                                }
                                                Store newStore = new Store();
                                                CAPICOM_STORE_LOCATION storeLoc = CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE;
                                                if (_currStoreLocation.Equals(LocalMachine)) {
                                                        storeLoc = CAPICOM_STORE_LOCATION.CAPICOM_LOCAL_MACHINE_STORE;
                                                }
                                                newStore.Open(storeLoc,
                                                              name,
                                                              CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);

                                                // Now delete if that is what was chosen
                                                if (alArgs[0].Equals("del")) {
                                                        if (_currStoreName.Equals(name)) {
                                                                Console.WriteLine("You cannot delete the store you are currently viewing");
                                                                Console.WriteLine("Please use the <cd> command to change stores first");
                                                                break;
                                                        }
													    newStore.Delete();
                                                }
                                        }
                                        catch (Exception e)
                                        {
                                                Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
                                        }
                                        break;
				case "d":
				case "dir":
				{
					Certificates oCerts;
					Listing listing = Listing.Brief;

					if ((_currStoreLocation.Equals(CurrentUser) || _currStoreLocation.Equals(LocalMachine))
						&& _currStoreName.Length == 0)
					{
						uint retval = 0;
						uint dwFlags = CERT_SYSTEM_STORE_CURRENT_USER;

						CertEnumSystemStoreCallback StoreCallback = new CertEnumSystemStoreCallback(Storesh.CertEnumSystemStoreCallback);
						if (_currStoreLocation.Equals(LocalMachine)) 
						{
							dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE;
						}
						retval= Win32.CertEnumSystemStore(
							dwFlags, 
							0, 
							_currStoreName, 
							StoreCallback 
							);
					}
					else if (alArgs.Count >= 1)
					{
						int i =0 ;
						try 
						{
							_currFilter = _oCurrStore.Certificates.GetEnumerator();
							for (i = 1; i < alArgs.Count; i++)
							{
								String param = ((String)alArgs[i]).ToLower();
								if (param.Equals("/l") || param.Equals("-l"))
								{
									listing = Listing.Long;
								} 
								else if (param.Equals("/subject") || param.Equals("-subject"))
								{
									Object filter = (System.String)alArgs[++i]; 
									oCerts = (Certificates)_oCurrStore.Certificates;
									oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,
										filter,
										false);
									_currFilter = oCerts.GetEnumerator();

								}
								else if (param.Equals("/eku") || param.Equals("-eku"))
								{
									Object filter = (System.String)alArgs[++i]; 
									oCerts = (Certificates)_oCurrStore.Certificates;
									oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY,
										filter,
										false);
									_currFilter = oCerts.GetEnumerator();

								}
								else if (param.Equals("/issuer") || param.Equals("-issuer"))
								{
									Object filter = (System.String)alArgs[++i]; 
									oCerts = (Certificates)_oCurrStore.Certificates;
									oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_ISSUER_NAME,
										filter,
										false);
									_currFilter = oCerts.GetEnumerator();

								}
								else if (param.Equals("/sha1") || param.Equals("-sha1"))
								{
									String filter = (String)alArgs[++i]; 
									oCerts = (Certificates)_oCurrStore.Certificates;
									oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_SHA1_HASH,
										filter,
										false);
									_currFilter = oCerts.GetEnumerator();
								}
							}
							i = 1;
							while (_currFilter.MoveNext() == true)
							{
								oCert = (Certificate) _currFilter.Current;
								Console.Write ( (i++ + ". ").PadRight(4,' '));
								switch (listing)
								{
									case Listing.Brief:
										Console.WriteLine(	ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME), CERTNAME_LENGTH) +
											" " + 
											ToColumn (oCert.ValidToDate.ToString(), VALIDITY_LENGTH) + 
											ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME), CERTNAME_LENGTH) );
										break;
									case Listing.Long:
									{
										Console.WriteLine(	ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME), CERTNAME_LENGTH) + 
											" " + 
											ToColumn (oCert.Thumbprint, THUMBPRINT_LENGTH ));
										Console.WriteLine ("Issuer: " + oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME));
										Console.WriteLine ("Validity Period: " + oCert.ValidFromDate + " - " + oCert.ValidToDate);
										DisplayEKU(oCert.ExtendedKeyUsage().EKUs);
										Console.WriteLine();
										break;
									}
								}
							}
						}
						catch (Exception e)
						{
							Console.WriteLine("An error was encountered: " + e.Message);
						}
					}
					break;
				}
				default:
					DisplayHelp();
					break;

			}

			return false;
		}

		public static bool CertEnumSystemStoreCallback(
			String pvSystemStore, 
			uint dwFlags, 
			ref CERT_SYSTEM_STORE_INFO pStoreInfo, 
			uint pvReserved, 
			String pvArg
			)
		{
			Console.WriteLine("[ " +pvSystemStore + " ]");
			return true;
		}

		public static Certificate GetCertByIndex( int idx )
		{
			Certificate oCert;
			int i = 0;

			if (_oCurrStore != null) 
			{
				if (_currFilter == null) 
				{
					_currFilter = _oCurrStore.Certificates.GetEnumerator();
				}
				else 
				{
					_currFilter.Reset();
				}

				while (_currFilter.MoveNext() == true)
				{
					oCert  = (Certificate)_currFilter.Current;
					i++;
					if (i == idx)
					{
						return oCert;
					}
				}
			}
			return null;
		}

		private static ArrayList ParseArgs(String input)
		{
			char[] delims = new char[] {' '};
			ArrayList argsarray = new ArrayList();
			String multiString = null;

			String[] argSplit = input.Split(delims);
			for (int i = 0; i < argSplit.Length; i++)
			{
				String curr = argSplit[i];
				if (curr.StartsWith("\"") && curr.EndsWith("\""))
				{
					argsarray.Add(curr.Substring(1,curr.Length-2));
				}
				else if (curr.StartsWith("\""))
				{
					multiString = curr;
				}
				else if (argSplit[i].EndsWith("\""))
				{
					multiString = multiString + " " + curr;
					argsarray.Add(multiString.Substring(1,multiString.Length-2));
					multiString = null;
				}
				else
				{
					if (multiString != null)
					{
						multiString = multiString + " " + curr;
					}
					else 
					{
						argsarray.Add(curr);
					}
				}
			}
			argSplit = null;
			return argsarray;
		}
		
		public static void DisplayHelp()
		{
			Console.WriteLine();
			Console.Write("[h]elp".PadRight(HELP_PAD, ' '));
			Console.WriteLine("This screen");

			Console.WriteLine();
			Console.Write("cd <location>".PadRight(HELP_PAD, ' '));
			Console.WriteLine("<location> is a store name or ..");
			Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "Can also be \\LocalMachine (\\lm) or \\CurrentUser (\\cu)");
				
			Console.WriteLine();
			Console.Write("[d]ir <options>".PadRight(HELP_PAD, ' '));
			Console.WriteLine("List the contents of a certificate store");
			Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "-l	Long listing");
			Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "-subject <name>	Match subject name.");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -