C#.NET 国密 SM2 公钥证书从文本转换
先前的 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 公钥证书从文本转换的更多相关文章
- java 解析国密SM2算法证书
首先说明用Java自带的解析x509证书类,是不能解析sm2算法的证书,执行会抛出异常. 用开源库bouncycastle能够解析.详细代码 private byte[] getCSPK(byte[] ...
- 谈谈PBOC3.0中使用的国密SM2算法
转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/39780825 作者:小马 一 知识准备 SM2是国密局推出的一种他们自己说具有自主 ...
- 推荐一款能支持国密SM2浏览器——密信浏览器
密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净. ...
- 一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱
转:https://blog.csdn.net/xuq09/article/details/91815366 The GmSSL Project网址:http://gmssl.org/docs/qui ...
- bouncycastle 国密SM2 API的使用
摘要:本文不对SM2做过多的介绍,主要介绍java bouncycastle库关于SM2的相关API的使用及注意事项 1. SM2 签名: 注意: 1)签名格式ASN1(描述了一种对数据进行表示.编码 ...
- openssl 全面支持国密SM2/SM3/SM4加密算法
sm4展示 代码 /** 文件名: https://github.com/liuqun/openssl-sm4-demo/blob/cmake/src/main.c */ #include <s ...
- 国密SSL证书免费试用申请指南
沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...
- 国密SSL证书申请免费试用
沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...
- 部署国密SSL证书,如何兼容国际主流浏览器?
国密算法在主流操作系统.浏览器等客户端中,还没有实现广泛兼容.因此,在面向开放互联网的产品应用中,国密算法无法得到广泛应用.比如,在SSL证书应用领域,由于国际主流浏览器不信任国密算法,如果服务器部署 ...
- OpenSSL 1.1.1 国密算法支持
OpenSSL 1.1.1 国密算法支持 https://www.openssl.org/ https://github.com/openssl/openssl OpenSSL 1.1.1 新特性: ...
随机推荐
- 阿里云2020上云采购季,你最pick哪个产品组合?
阿里云2020上云采购季如火如荼进行中,活动还剩最后10天啦,你的云产品都买好了吗? 还没买的,还没逛的,请戳:https://www.aliyun.com/sale-season/2020/proc ...
- MySQL深潜|剖析Performance Schema内存管理
简介: 本文主要是通过对PFS引擎的内存管理源码的阅读,解读PFS内存分配及释放原理,深入剖析其中存在的一些问题,以及一些改进思路. 一 引言 MySQL Performance schema(PF ...
- [FAQ] Python list 的值是带有小括号的是什么意思 ?
python 中的 list 即列表,是用中括号 [ ] 表示的数组列表: dict 即字典,是用花括号 { } 表示的 json 对象: tuple 即元祖,是用小括号表示的序列: 见到它们之间的组 ...
- IIncrementalGenerator 获取项目默认命名空间
本文将告诉大家如何在分析器里面获取到项目的默认命名空间 在 Roslyn 分析器里面读取项目的默认命名空间,可以通过读取项目的属性配置实现.通过 IIncrementalGenerator 增量 So ...
- 【Linux】XFS文件系统
XFS WIKI介绍 XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc ...
- golang 并发问题
如何使用channel实现定时器? 使用channel的阻塞,里面放一个sleep就可以了 Go语言--goroutine并发模型: 视频地址: https://www.bilibili.com/vi ...
- List<T> 根据对象中的属性处理数据
一.创建测试数据 UserEntity user1 = UserEntity.builder().id(1).name("张三").sex(0).build(); UserEnti ...
- 关于小说阅读前端翻页插件推荐turn.js
http://www.turnjs.com
- NumPy 数组复制与视图详解
NumPy 数组的复制与视图 NumPy 数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别. 复制 复制 会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间. ...
- C 语言编程 — GDB 调试工具
目录 文章目录 目录 前文列表 代码调试 GDB 启动 GDB 交互命令 运行程序 暂停程序 设置断点 设置观察点 设置捕捉点 打印信息 查询运行信息 分割窗口 前文列表 <程序编译流程与 GC ...