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 新特性: ...
随机推荐
- 龙湖千丁基于 ACK@Edge 的云原生智慧停车系统架构实践
简介: 结合龙湖千丁自研的新版停车云系统以及 ACK@Edge 提供的标准 Kubernetes 服务以及云边一体化协同解决方案,整体来着,边缘部署时间成本由 1 天缩短到 3 小时,将之前的手动升级 ...
- Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践
简介: 服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,合二为一并共建新一代的服务框架是必然趋势.Dubbo3.0 是 Dub ...
- dotnet 5 的 bin 文件夹下的 ref 文件夹是做什么用的
本文来和大家聊聊在 dotnet 5 和 dotnet 6 或更高版本的 dotnet 构建完成,在 bin 文件夹下,输出的 ref 文件夹.在此文件夹里面,将会包含项目程序集同名的 dll 文件, ...
- Vue3 和 Vue2 的异同及开发中具体区别
目录 总体来说 性能提升 树摇(Tree shaking) 碎片化节点(Fragment) 传送门 (Teleport) Suspense 更好的TypeScript支持 Composition AP ...
- Django之ajax简介
1.MTV与MVC 框架类型:MVC: M:models V:views C:controller Django用的框架就是MTV MTV: M:models T:templates V:views ...
- visual studio 2008的试用版评估期已结束(附无法使用产品密钥)的解决方法
visual studio 2008过了试用期后再次启动提示对话框:visual studio的试用版评估期已结束. 解决办法: 第一步,在"控制面板"中启动"添加删除程 ...
- vue-苟曰的老板不发工资230行原创js代码写个扫雷小游戏
上gif: 1.开局提示动画 2.游戏中状态提示 3.开挂模式提示 4.计时器 5.游戏模式扫雷成功,蓝色进度条表示当次扫雷的完成度 6.若当次时间小于最佳记录,则更新最佳记录,如果最佳记录小于设置的 ...
- Treap,Splay & LCT 学习笔记
从二叉搜索树到平衡树 二叉搜索树(Binary Search Tree)是一种二叉树的树形数据结构,它维护一个集合,并保证它的中序遍历按照递增顺序给出了这个集合的所有元素.由此,可以完成插入,删除,查 ...
- .NET CORE 完美支持AOT 的 ORM SqlSugar 教程
1.AOT适合产场 Aot适合工具类型的项目使用,优点禁止反编 ,第一次启动快,业务型项目或者反射多的项目不适合用AOT AOT更新记录: 实实在在经过实践的AOT ORM 5.1.4.117 +支持 ...
- 让.NET 8 支持 Windows Vista RTM
众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 需要花费很大精力.导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如 .NET ...