对于数字证书存储导入到电脑中,采用如下方式:

 /// <summary>
/// 导入证书
/// </summary>
/// <param name="rawData">证书字节数组</param>
/// <param name="keyStorePassWord">keyStore密码</param>
/// <param name="keyPassWord">证书密码</param>
/// <param name="certificateType">证书类型</param>
/// <returns>true表示导入成功 false表示导入失败</returns>
public bool ImportCertificate(byte[] rawData, string keyStorePassWord, string keyPassWord, string mailAccount, CertificateType certificateType = CertificateType.Pkcs12)
{
try
{
bool result = false;
if (certificateType == CertificateType.Pkcs12)
{
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite);
X509Certificate2 certificate = new X509Certificate2(rawData, keyPassWord, X509KeyStorageFlags.Exportable);
//X509Certificate2 certificate = new X509Certificate2(rawData, keyPassWord, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
//获取公钥
var cerPublicKey = certificate.Export(X509ContentType.Cert);
result =true; store.Add(certificate);
}
return result;
}
else
{
X509Certificate2 certificate = new X509Certificate2(rawData, keyPassWord);
result =true;
return result;
} }
catch (Exception ex)
{
DAL.ErrorLog.AddErrorLogs("证书保存失败!" + ex.Message);
return false;
}
}

对应的获取相应的数字证书的私钥:

 /// <summary>
/// 获取P12格式的证书
/// </summary>
/// <param name="serialNumber">证书序列号</param>
/// <param name="keyStorePassWord">keyStore密码</param>
/// <param name="keyPassWord">证书密码</param>
/// <param name="hasCertificate">证书类型</param>
/// <returns>如果返回null 表示没有获取到证书</returns>
public byte[] GetCertificate(string serialNumber, string keyStorePassWord, string keyPassWord)
{
byte[] result = null;
try
{
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite);
foreach (var item in store.Certificates)
{
if (item.SerialNumber == serialNumber)
{
result = item.Export(X509ContentType.Pfx, keyPassWord);
//result = item.RawData;
break;
}
}
}
}
catch (Exception ex)
{
string errorMessage = ex.Message;
result = null;
}
return result;
}

上面的result = item.Export(X509ContentType.Pfx, keyPassWord);方法需注意:当参数为两个时,及你把证书密码放上去的时候获取的是私钥,当为如下时获取的是公钥:result = item.Export(X509ContentType.Pfx);

xamarin uwp数字证书公钥私钥的更多相关文章

  1. 【转载】OpenSSL 提取 pfx 数字证书公钥与私钥

    转自https://www.cnblogs.com/Irving/p/9551110.html OpenSSL 提取 pfx 数字证书公钥与私钥   由于之前生产环境已经使用了 Identityser ...

  2. OpenSSL 提取 pfx 数字证书公钥与私钥

    由于之前生产环境已经使用了 Identityserver4 用来做授权与认证的服务,而新项目采用 Spring Cloud 微服务体系,一方面 Spring Cloud 官方暂时只支持 OAuth2. ...

  3. 公私钥 SSH 数字证书

    公私钥 SSH 数字证书 小菜鸟今天买了华为云一台服务器,在使用公私钥远程登录服务器的时候,忘记了相关公钥私钥的原理和一些应用了,今天复习一波做个记录. 相关概念 公钥:公钥用来给数据加密,用公钥加密 ...

  4. 【转】Android数字证书

    Android数字证书的作用是非常重要的.Android操作系统每一个应用程序的安装都需要经过这一数字证书的签名. Android手机操作系统作为一款比较流行的开源系统在手机领域占据着举足轻重的地位. ...

  5. 免费CA数字证书的申请、安装、导入、导出

    http://wenku.baidu.com/link?url=oDUw50eCE5zX8tmg4N3-ddYGLt1U5aJYGEN7rk_z7t6LuMHL3M4oBstYBI_dQ1UnCtcK ...

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

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

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

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

  8. java验证openssl生成的ssl证书和私钥是否匹配

    最近有一个需求上传ssl证书和私钥,但是上传之前需要验证ssl证书和私钥是否正确,其中的业务逻辑涉及到以下几点: 一.读取ssl证书,读取ssl证书公钥       要实现该功能比较简单,java里面 ...

  9. 公钥与私钥对HTTPS的理解(数字证书的需要)

    本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...

随机推荐

  1. Servlet读取Excel标准化数据库过程记录

    完成数据库的连接 获取连接参数 拷贝1.数据库URL 2.驱动程序类 3.用户 编写Servlet 1.创建连接对象 Connection con = null; PreparedStatement ...

  2. 1.Linux中安装LNMP过程

    第一步安装mysql过程 安装包mysql-5.0.22.tar.gz,解压tar -zxvf  mysql-5.0.22.tar.gz cd mysql-5.0.22 进行源码安装./configu ...

  3. TAQSkinScrollBar 类美化滚动条再讨论

    再说:TAQSkinScrollBar 类美化滚动条,http://www.138soft.com/?p=156  里面有人提到不可以滚动 滚动的改善方法: unit AQSkinScrollBar; ...

  4. Map排序

    HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 ...

  5. 分布式大数据高并发的web开发框架

    一.引言 通常我们认为静态网页html的网站速度是最快的,但是自从有了动态网页之后,很多交互数据都从数据库查询而来,数据也是经常变化的,除了一些新闻资讯类的网站,使用html静态化来提高访问速度是不太 ...

  6. Mac使用总结

    显示隐藏文件 终端输入:defaults write com.apple.finder AppleShowAllFiles -bool true; KillAll Finder 添加SSHKey Ma ...

  7. mysql开启远程访问权限

    1. //登录数据库 mysql -u root -pvmwaremysql>use mysql; //%为所有ip都可以远程访问 mysql>update user set host = ...

  8. bootstrap之伪元素

    bootstrap之伪元素 参考地址:http://www.cnblogs.com/keyi/p/5943178.html http://www.runoob.com/css/css-pseudo-e ...

  9. struts2 框架处理流程

    struts2 框架处理流程 流程图如下: 注意:StrutsPrepareAndExecuteFilter替代了2.1.3以前的FilterDispatcher过滤器,使得在执行Action之前可以 ...

  10. cocospods 最新安装教程

    Terminator 终端原来 安装 cocoa pods  终端命令 :sudo gem install cocoapods  #已经无效系统更新后的 cocoa pods 终端命令 : sudo ...