string Thumbprint = "C2489D912F247C187AA14B1291A6fB612281225D";
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection certificates =
  store.Certificates.Find(X509FindType.FindByThumbprint,
Thumbprint, false);

1、X509Store:表示 X.509 存储区,该存储区是保留和管理证书的物理存储区。 此类不能被继承。

   //
// 摘要:
// 表示 X.509 存储区,该存储区是保留和管理证书的物理存储区。 此类不能被继承。
public sealed class X509Store
{
//
// 摘要:
// 使用当前用户存储区的个人证书初始化 System.Security.Cryptography.X509Certificates.X509Store 类的新实例。
public X509Store();
//
// 摘要:
// 使用指定的存储区名称初始化 System.Security.Cryptography.X509Certificates.X509Store 类的新实例。
//
// 参数:
// storeName:
// 一个表示存储区名称的字符串值。 有关更多信息,请参见 System.Security.Cryptography.X509Certificates.StoreName。
public X509Store(string storeName);
//
// 摘要:
// 使用指定的 System.Security.Cryptography.X509Certificates.StoreName 值初始化 System.Security.Cryptography.X509Certificates.X509Store
// 类的新实例。
//
// 参数:
// storeName:
// 指定 X.509 证书存储区名称的枚举值之一。
public X509Store(StoreName storeName);
//
// 摘要:
// 使用指定的 System.Security.Cryptography.X509Certificates.StoreLocation 值初始化 System.Security.Cryptography.X509Certificates.X509Store
// 类的新实例。
//
// 参数:
// storeLocation:
// 指定 X.509 证书存储区位置的枚举值之一。
public X509Store(StoreLocation storeLocation);
//
// 摘要:
// 使用 HCERTSTORE 存储区的 Intptr 句柄初始化 System.Security.Cryptography.X509Certificates.X509Store
// 类的新实例。
//
// 参数:
// storeHandle:
// HCERTSTORE 存储区的句柄。
//
// 异常:
// T:System.ArgumentNullException:
// storeHandle 参数为 null。
//
// T:System.Security.Cryptography.CryptographicException:
// storeHandle 参数指向了无效的上下文。
public X509Store(IntPtr storeHandle);
//
// 摘要:
// 使用指定的 System.Security.Cryptography.X509Certificates.StoreName 和 System.Security.Cryptography.X509Certificates.StoreLocation
// 值初始化 System.Security.Cryptography.X509Certificates.X509Store 类的新实例。
//
// 参数:
// storeName:
// 指定 X.509 证书存储区名称的枚举值之一。
//
// storeLocation:
// 指定 X.509 证书存储区位置的枚举值之一。
//
// 异常:
// T:System.ArgumentException:
// storeLocation 不是有效位置或者 storeName 不是有效名称。
public X509Store(StoreName storeName, StoreLocation storeLocation);
//
// 摘要:
// 使用一个字符串初始化 System.Security.Cryptography.X509Certificates.X509Store 类的新实例,该字符串表示
// System.Security.Cryptography.X509Certificates.StoreName 枚举中的一个值和 System.Security.Cryptography.X509Certificates.StoreLocation
// 枚举中的一个值。
//
// 参数:
// storeName:
// 一个字符串,表示 System.Security.Cryptography.X509Certificates.StoreName 枚举中的值。
//
// storeLocation:
// 指定 X.509 证书存储区位置的枚举值之一。
//
// 异常:
// T:System.ArgumentException:
// storeLocation 包含无效值。
public X509Store(string storeName, StoreLocation storeLocation); //
// 摘要:
// 返回位于 X.509 证书存储区中的证书集合。
//
// 返回结果:
// 证书集合。
public X509Certificate2Collection Certificates { get; }
//
// 摘要:
// 获取 X.509 证书存储区的位置。
//
// 返回结果:
// 证书存储区的位置。
public StoreLocation Location { get; }
//
// 摘要:
// 获取 X.509 证书存储区的名称。
//
// 返回结果:
// 证书存储区的名称。
public string Name { get; }
//
// 摘要:
// 获取 HCERTSTORE 存储区的 System.IntPtr 句柄。
//
// 返回结果:
// HCERTSTORE 存储区的句柄。
//
// 异常:
// T:System.Security.Cryptography.CryptographicException:
// 存储区未打开。
public IntPtr StoreHandle { get; } //
// 摘要:
// 将证书添加到 X.509 证书存储区。
//
// 参数:
// certificate:
// 要添加的证书。
//
// 异常:
// T:System.ArgumentNullException:
// certificate 为 null。
//
// T:System.Security.Cryptography.CryptographicException:
// 未能将证书添加到存储区。
public void Add(X509Certificate2 certificate);
//
// 摘要:
// 将证书集合添加到 X.509 证书存储区。
//
// 参数:
// certificates:
// 要添加的证书集合。
//
// 异常:
// T:System.ArgumentNullException:
// certificates 为 null。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public void AddRange(X509Certificate2Collection certificates);
//
// 摘要:
// 关闭 X.509 证书存储区。
public void Close();
//
// 摘要:
// 打开 X.509 证书存储区或创建新存储区,具体取决于 System.Security.Cryptography.X509Certificates.OpenFlags
// 标志设置。
//
// 参数:
// flags:
// 枚举值的按位组合,指定打开 X.509 证书存储区的方式。
//
// 异常:
// T:System.Security.Cryptography.CryptographicException:
// 该证书不可读。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.ArgumentException:
// 存储区包含无效值。
public void Open(OpenFlags flags);
//
// 摘要:
// 从 X.509 证书存储区移除证书。
//
// 参数:
// certificate:
// 要移除的证书。
//
// 异常:
// T:System.ArgumentNullException:
// certificate 为 null。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public void Remove(X509Certificate2 certificate);
//
// 摘要:
// 从 X.509 证书存储区移除一系列证书。
//
// 参数:
// certificates:
// 要移除的一系列证书。
//
// 异常:
// T:System.ArgumentNullException:
// certificates 为 null。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public void RemoveRange(X509Certificate2Collection certificates);
}

  

2、StoreName:

   //
// 摘要:
// 指定要打开的 X.509 证书存储区的名称。
public enum StoreName
{
//
// 摘要:
// 其他用户的 X.509 证书存储区。
AddressBook = ,
//
// 摘要:
// 第三方证书颁发机构 (CA) 的 X.509 证书存储区。
AuthRoot = ,
//
// 摘要:
// 中间证书颁发机构 (CA) 的 X.509 证书存储区。
CertificateAuthority = ,
//
// 摘要:
// 吊销的证书的 X.509 证书存储区。
Disallowed = ,
//
// 摘要:
// 个人证书的 X.509 证书存储区。
My = ,
//
// 摘要:
// 受信任的根证书颁发机构 (CA) 的 X.509 证书存储区。
Root = ,
//
// 摘要:
// 直接受信任的人和资源的 X.509 证书存储区。
TrustedPeople = ,
//
// 摘要:
// 直接受信任的发行者的 X.509 证书存储区。
TrustedPublisher =
}

3、StoreLocation:

    //
// 摘要:
// 指定 X.509 证书存储区的位置。
public enum StoreLocation
{
//
// 摘要:
// 当前用户使用的 X.509 证书存储区。
CurrentUser = ,
//
// 摘要:
// 分配给本地计算机的 X.509 证书存储区。
LocalMachine =
}

4、OpenFlags

    //
// 摘要:
// 指定打开 X.509 证书存储区的方式。
[Flags]
public enum OpenFlags
{
//
// 摘要:
// 以只读方式打开 X.509 证书存储区。
ReadOnly = 0,
//
// 摘要:
// 以读写方式打开 X.509 证书存储区。
ReadWrite = 1,
//
// 摘要:
// 以允许最高级访问的方式打开 X.509 证书存储区。
MaxAllowed = 2,
//
// 摘要:
// 仅打开现有存储区。如果不存在任何存储区,System.Security.Cryptography.X509Certificates.X509Store.Open(System.Security.Cryptography.X509Certificates.OpenFlags)
// 方法不会创建新的存储区。
OpenExistingOnly = 4,
//
// 摘要:
// 打开 X.509 证书存储区并添加存档证书。
IncludeArchived = 8
}

5、public X509Certificate2Collection Find(X509FindType findType, object findValue, bool validOnly);

        //
// 摘要:
// 使用 System.Security.Cryptography.X509Certificates.X509FindType 枚举和 findValue 对象所指定的搜索条件搜索
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection 对象。
//
// 参数:
// findType:
// System.Security.Cryptography.X509Certificates.X509FindType 值之一。
//
// findValue:
// 作为对象的搜索条件。
//
// validOnly:
// 如果仅允许从搜索中返回有效的证书,则为 true;否则为 false。
//
// 返回结果:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection 对象。
//
// 异常:
// T:System.Security.Cryptography.CryptographicException:
// findType 无效。
public X509Certificate2Collection Find(X509FindType findType, object findValue, bool validOnly);

  

6、X509FindType

    //
// 摘要:
// 指定通过 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法搜索的值的类型。
public enum X509FindType
{
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的指纹。
FindByThumbprint = 0,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的主题名称。 与 System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectDistinguishedName
// 枚举值所提供的相比,这是一种不太具体的搜索方式。 通过使用 System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName
// 值,System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法将使用提供的值执行不区分大小写的字符串比较。 例如,如果将“MyCert”传递给 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法,该方法将查找主题名称中包含该字符串的所有证书,而不考虑其他主题值。 按可分辨名称搜索的精确性较高。
FindBySubjectName = 1,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的主题可分辨名称。 与 System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName
// 枚举值所提供的相比,这是一种更具体的搜索方式。 通过使用 System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectDistinguishedName
// 值,System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法将对整个可分辨名称执行不区分大小写的字符串比较。 按主题名称搜索的精确性较低。
FindBySubjectDistinguishedName = 2,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书颁发者的名称。 与 System.Security.Cryptography.X509Certificates.X509FindType.FindByIssuerDistinguishedName
// 枚举值所提供的相比,这是一种不太具体的搜索方式。 通过使用 System.Security.Cryptography.X509Certificates.X509FindType.FindByIssuerName
// 值,System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法将使用提供的值执行不区分大小写的字符串比较。 例如,如果将“MyCA”传递给 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法,该方法将查找颁发者名称中包含该字符串的所有证书,而不管其是否包含其他颁发者值。
FindByIssuerName = 3,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的颁发者可分辨名称。 与 System.Security.Cryptography.X509Certificates.X509FindType.FindByIssuerName
// 枚举值所提供的相比,这是一种更具体的搜索方式。 通过使用 System.Security.Cryptography.X509Certificates.X509FindType.FindByIssuerDistinguishedName
// 值,System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法将对整个可分辨名称执行不区分大小写的字符串比较。 按颁发者名称搜索的精确性较低。
FindByIssuerDistinguishedName = 4,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,它表示通过证书对话框显示的或 System.Security.Cryptography.X509Certificates.X509Certificate.GetSerialNumberString
// 方法返回的证书的序列号,但不包含空格。
FindBySerialNumber = 5,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个以当地时间表示的 System.DateTime 值。 可使用 System.DateTime.Now 查找当前有效的所有证书。
FindByTimeValid = 6,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个以当地时间表示的 System.DateTime 值。 值不必处于将来时间。 例如,通过从 System.DateTime.Now的
// System.Security.Cryptography.X509Certificates.X509FindType.FindByTimeValid 的
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 操作的结果中采用去年最后一天的 System.Security.Cryptography.X509Certificates.X509FindType.FindByTimeNotYetValid
// 的 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 操作的结果的交集,可以使用 System.Security.Cryptography.X509Certificates.X509FindType.FindByTimeNotYetValid
// 来查找已在当前年中有效的证书。
FindByTimeNotYetValid = 7,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个以当地时间表示的 System.DateTime 值。 例如,通过从 System.DateTime.Now 的
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 操作的结果中消除今年的最后一天的 System.Security.Cryptography.X509Certificates.X509FindType.FindByTimeExpired
// 的 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 操作的结果,可以查找有效期截止到今年年底的所有证书。
FindByTimeExpired = 8,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的模板名,如“ClientAuth”。 模板名为 X509 3 版扩展名,指定证书的使用。
FindByTemplateName = 9,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书的应用程序策略友好名称或对象标识符(OID,或 System.Security.Cryptography.Oid)。
// 例如,可以使用“加密文件系统”或“1.3.6.1.4.1.311.10.3.4”。 对于将要本地化的应用程序,由于友好名称经过本地化处理,因此必须使用 OID
// 值。
FindByApplicationPolicy = 10,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串表示证书策略的友好名称或对象标识符(OID,或 System.Security.Cryptography.Oid)。
// 最佳做法是使用 OID,如“1.3.6.1.4.1.311.10.3.4”。 对于将要本地化的应用程序,由于友好名称经过本地化处理,因此必须使用 OID。
FindByCertificatePolicy = 11,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串描述要查找的扩展名。 对象标识符 (OID) 常用于指示 System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法搜索扩展名与 OID 值相匹配的所有证书。
FindByExtension = 12,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个表示密钥用法的字符串或一个表示位掩码(包含所有请求的密钥用法)的整数。 对于字符串值,一次只能指定一种密钥用法,但是可以按级联序列使用
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法以使请求用法交叉。 例如,可以将 findValue 参数设置为“KeyEncipherment”或整数(0x30 指示“KeyEncipherment”和“DataEncipherment”)。
// 还可以使用 System.Security.Cryptography.X509Certificates.X509KeyUsageFlags 枚举的值。
FindByKeyUsage = 13,
//
// 摘要:
// System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Find(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean)
// 方法的 findValue 参数必须是一个字符串,该字符串用十六进制值表示主题密钥标识符,如 UI 中显示的“F3E815D45E83B8477B9284113C64EF208E897112”。
FindBySubjectKeyIdentifier = 14
}

  

C#获取数字证书的更多相关文章

  1. certbot 获取数字证书失效问题

    title: certbot 获取数字证书失效问题 author: Narule date: 2021-02-18 10:45:00 +0800 categories: [Technology^技术, ...

  2. android利用数字证书对程序签名

     签名的必要性 1.  防止你已安装的应用被恶意的第三方覆盖或替换掉. 2.  开发者的身份标识,签名可以防止抵赖等事件的发生. 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同 ...

  3. 转: 在.NET中操作数字证书

    作者:玄魂出处:博客2010-06-23 12:05 http://winsystem.ctocio.com.cn/19/9492019.shtml .NET为我们提供了操作数字证书的两个主要的类,分 ...

  4. android 利用数字证书对程序签名

    签名的必要性 1.  防止你已安装的应用被恶意的第三方覆盖或替换掉. 2.  开发者的身份标识,签名可以防止抵赖等事件的发生. 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样 ...

  5. 数字证书简介及Java编码实现

    1.数字证书简介 数字证书具备常规加密解密必要的信息,包含签名算法,可用于网络数据加密解密交互,标识网络用户(计算机)身份.数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载 ...

  6. 数字签名、数字证书的原理以及证书的获得java版

    数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加 ...

  7. 在.NET中操作数字证书(新手教程)

    .NET为我们提供了操作数字证书的两个主要的类,分为为: System.Security.Cryptography.X509Certificates.X509Certificate2类, 每个这个类的 ...

  8. xamarin uwp数字证书公钥私钥

    对于数字证书存储导入到电脑中,采用如下方式: /// <summary> /// 导入证书 /// </summary> /// <param name="ra ...

  9. C#编程总结(十一)数字证书

    C#编程总结(十一)数字证书 之前已经通过文章介绍了数字证书的基础知识,包括加密和数字签名. 具体可见: 1.C#编程总结(七)数据加密——附源码 2.C#编程总结(八)数字签名 这里来讲述数字证书的 ...

随机推荐

  1. 端口(port)的安全模式(security mode)

    1. Cisco29系列交换机可以做基于2层的端口安全 ,即mac地址与端口进行绑定.2. Cisco3550以上交换机均可做基于2层和3层的端口安全, 即mac地址与端口绑定以及mac地址与ip地址 ...

  2. <hdu - 1863> 畅通工程 并查集和最小生成树问题

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...

  3. find中的-print0和xargs中-0的区别

    默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 ('\n'), 因此我们看到的 find 的输出都是一行一行的: [bash-4.1.5] ; ls -l total 0 -r ...

  4. matcaffe的blob维度顺序

    matcaffe是caffe的matlab接口.caffe本身是C++写的,其blob的维度顺序是[N,C,H,W],N表示batchSize,C表示channel数目,H表示feature map的 ...

  5. SpringMVC同时使用<mvc:resources … />和日期转换Formatter时出现问题的解决方法

    很久没更新博文了,不是没有学习,而是很多东西记在OneNote里面,收获很多啊,因为各种杂事,所以对于博客很久没更新了. 个人觉得:博客比起OneNote或者为知笔记之类的云笔不同在于博客应该记载的是 ...

  6. 凭借5G研究优势,诺基亚将携手菲律宾将其应用于VR/AR领域

    目前,很多人都在抱怨网速不行,影响视频的流畅播放,未来这些问题可以通过5G解决.近日,诺基亚和PLDT的全资子公司Smart首次在菲律宾一个"现场"网络演示上实现了5G速度,该网络 ...

  7. Jstorm调度定制化接口(0.9.5 及高版本)

    从JStorm 0.9.0 开始, JStorm 提供非常强大的调度功能, 基本上可以满足大部分的需求. 在学习如何使用新调度前, 麻烦先学习 JStorm 0.9.0介绍 提供哪些功能 接口 设置每 ...

  8. vim 删除行末所有内容

    %s/\s*$//g

  9. rzsz的安装

    rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具优点:比ftp命令方便,而且服务器不用打开FTP服务. sz:将选定的文件发送(send)到本地机器rz:运行该命令 ...

  10. javaMail邮件发送的简单实现

    package com.test.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.Ses ...