先前的 Util 是直接从文件中转换的

https://www.cnblogs.com/runliuv/p/15079404.html

public static AsymmetricKeyParameter GetPublickeyFromX509File(FileInfo file)

加一个方法,从文本字符串转换。

SM2 公钥证书文本:

-----BEGIN CERTIFICATE-----
MIICvTCCAmGgAwIBAgIFExIYAVkwDAYIKoEcz1UBg3UFADAlMQswCQYDVQQGEwJD
TjEWMBQGA1UECgwNQ0ZDQSBTTTIgT0NBMTAeFw0yMDEyMDkwMjU3NTVaFw0yNTEy
MDkwMjU3NTVaMIGaMQswCQYDVQQGEwJDTjESMBAGA1UECgwJQ0ZDQSBPQ0ExMQ0w
CwYDVQQLDARQU0JDMRkwFwYDVQQLDBBPcmdhbml6YXRpb25hbC0yMU0wSwYDVQQD
DEQwNTFA5Lit5Zu96YKu5pS/5YKo6JOE6ZO26KGM6IKh5Lu95pyJ6ZmQ5YWs5Y+4
QE45MTExMDAwMDcxMDkzNDY1WENAMjBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IA
BNO38IXNDIOEVG0agcMVldn44y2Dy+O/5y5CNiX17zNHTduqbo8e2W/dUFJI4Nlh
+t+ob+0FFh2vLip/N2sSzrujggEEMIIBADAfBgNVHSMEGDAWgBRck1ggWiRzVhAb
ZFAQ7OmnygdBETAMBgNVHRMBAf8EAjAAMEgGA1UdIARBMD8wPQYIYIEchu8qAQEw
MTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5o
dG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5jZmNhLmNvbS5jbi9TTTIv
Y3JsNTA4Ny5jcmwwDgYDVR0PAQH/BAQDAgbAMB0GA1UdDgQWBBQpy5PgWpo2fVK2
0jQS4vZFhm4FbzAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEc
z1UBg3UFAANIADBFAiAzaOYBRP9RY93947T6h7VKBnwdj5FV2f/ULYAHAG+DGQIh
ANpF9YrgoO7MHQi3bDdz/G+cZGZLqznltOnbBHeJUga9
-----END CERTIFICATE-----

处理方法(nuget上下载最新BouncyCastle.Crypto.dll):

 public static AsymmetricKeyParameter GetPublickeyFromX509String(string publicKeyCert)
{
//还原完整文本格式
publicKeyCert = StrToPubCert(publicKeyCert); byte[] bytesCerContent = System.Text.Encoding.UTF8.GetBytes(publicKeyCert);
//需要完整文本格式才能解析
X509Certificate certificate = new X509CertificateParser().ReadCertificate(bytesCerContent);
return certificate.GetPublicKey();
} /// <summary>
/// 转为完整格式
/// </summary>
/// <param name="pubKeyStr"></param>
/// <returns></returns>
public static string StrToPubCert(string publicKeyCert)
{
//去除意外字符
publicKeyCert = publicKeyCert.Replace("-----BEGIN CERTIFICATE-----", "").Replace("-----END CERTIFICATE-----", "").Replace("\r", "").Replace("\n", "").Trim(); //完整
string rn = "\n";
StringBuilder sbKey = new StringBuilder(publicKeyCert);
int nKeyLen = sbKey.Length; //sbKey为base64编码的公钥字符串
for (int i = 64; i < nKeyLen; i += 64)
{ sbKey.Insert(i, rn); i++;
}
sbKey.Insert(0, "-----BEGIN CERTIFICATE-----" + rn);
sbKey.Append(rn + "-----END CERTIFICATE-----" + rn);
string all_key_str = sbKey.ToString(); return all_key_str;
}

public X509Certificate ReadCertificate(byte[] input),这个方法需要读取完整公钥格式的字符串,即带“-----BEGIN CERTIFICATE-----”和“"-----END CERTIFICATE-----”,否则转换不了。

文本转byte[] 时,使用System.Text.Encoding.UTF8.GetBytes(),而非Convert.FromBase64String()。

C#.NET 国密 SM2 公钥证书从文本转换的更多相关文章

  1. java 解析国密SM2算法证书

    首先说明用Java自带的解析x509证书类,是不能解析sm2算法的证书,执行会抛出异常. 用开源库bouncycastle能够解析.详细代码 private byte[] getCSPK(byte[] ...

  2. 谈谈PBOC3.0中使用的国密SM2算法

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/39780825 作者:小马 一 知识准备 SM2是国密局推出的一种他们自己说具有自主 ...

  3. 推荐一款能支持国密SM2浏览器——密信浏览器

    密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净. ...

  4. 一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱

    转:https://blog.csdn.net/xuq09/article/details/91815366 The GmSSL Project网址:http://gmssl.org/docs/qui ...

  5. bouncycastle 国密SM2 API的使用

    摘要:本文不对SM2做过多的介绍,主要介绍java bouncycastle库关于SM2的相关API的使用及注意事项 1. SM2 签名: 注意: 1)签名格式ASN1(描述了一种对数据进行表示.编码 ...

  6. openssl 全面支持国密SM2/SM3/SM4加密算法

    sm4展示 代码 /** 文件名: https://github.com/liuqun/openssl-sm4-demo/blob/cmake/src/main.c */ #include <s ...

  7. 国密SSL证书免费试用申请指南

    沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...

  8. 国密SSL证书申请免费试用

    沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...

  9. 部署国密SSL证书,如何兼容国际主流浏览器?

    国密算法在主流操作系统.浏览器等客户端中,还没有实现广泛兼容.因此,在面向开放互联网的产品应用中,国密算法无法得到广泛应用.比如,在SSL证书应用领域,由于国际主流浏览器不信任国密算法,如果服务器部署 ...

  10. OpenSSL 1.1.1 国密算法支持

    OpenSSL 1.1.1 国密算法支持 https://www.openssl.org/ https://github.com/openssl/openssl OpenSSL 1.1.1 新特性: ...

随机推荐

  1. 走近Quick Audience,了解消费者运营产品的发展和演变

    简介: Quick Audience产品是一款云原生面向消费者的营销产品,自诞生以来,经历了三个发展阶段.每个阶段的转变,都与互联网环境和消费者行为的变迁有着极大的关联.   Quick Audien ...

  2. 读取 k8s 存储在 etcd 上的数据

    读取 k8s 存储在 etcd 上的数据 Etcd Assistant 是一款 Etcd 可视化管理工具,便捷高效地操作您的 etcd 集群:支持多种键的视图:管理租约.用户.角色和权限. etcd是 ...

  3. kali使用apt-get update 出现数字签名失效

    kali使用apt-get update 出现数字签名失效 下载签名:wget archive.kali.org/archive-key.asc 安装签名:apt-key add archive-ke ...

  4. gin-vue-admin开发教程 01安装与启用

    目录 目标 视频教程地址: 环境要求 前端环境安装文档: 安装node npm cnpm yarn(选装) 后端环境安装文档: Golang1.14.2 环境的安装 goland的配置 gin-vue ...

  5. jeecg-boot中分页接口用自定义sql和list实现

    1.controller中 @ApiOperation(value="分析仪工作状态和报警-3列-分页", notes="分析仪工作状态和报警状态-分页") @ ...

  6. 使用js有效括号匹配封装函数

    点击查看代码 function isValidParentheses(str) { // 定义一个栈,用于存储待匹配的左括号 let stack = []; // 定义一个对象,用于快速判断括号是否成 ...

  7. 前端scale负数表示翻转

    https://blog.csdn.net/wang_yu_shun/article/details/121299208 极力推荐这个博主写的,前端有关负数的小技巧

  8. angular自定义验证器实现所遇到的问题

    1:返回值问题 校验器 2:返回值类型 3:创建自定义指令配置注意 1:校验器 回过头来看一下表单校验的校验器.校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对 ...

  9. python小功能

    django实现将linux目录和文件名列出来 def index(request): obj=models.USER.objects.all() fileroot = 'd:\machangwei' ...

  10. deeplearning4j训练MNIST数据集以及验证

    训练模型官方示例 MNIST数据下载地址: http://github.com/myleott/mnist_png/raw/master/mnist_png.tar.gz GitHub示例地址: ht ...