C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用)
C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用),
从BASE64编码的公钥中提取16进制字符串公钥,
从BASE64编码的私钥中提取16进制字符串私钥,
锦州银行、建行轻应用在使用这种私钥 。
其它银行的BASE64编码国密私钥,直接从base64编码转成16进制字符串即可。
它这个要从ECPublicKeyParameters公钥Q中提取公钥字符串。
从ECPrivateKeyParameters对象D中提取私钥。
String mchtPubKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAElmWpvTHHsQEUMSLoMcDssXAjCkdgjCkncPXNnnapIEkSXAYZMV7/f0ba+b/VKsZTRgvZ2InkxSRLFHVznnf1lg==";
String mchtPriKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgGKTw1sFkats23rL373anMYL+r1dlIv1MWor8PCIqrmugCgYIKoEcz1UBgi2hRANCAASWZam9McexARQxIugxwOyxcCMKR2CMKSdw9c2edqkgSRJcBhkxXv9/Rtr5v9UqxlNGC9nYieTFJEsUdXOed/WW"; String bankSm2PublicKey = SM2ExtUtil.GetPublicKey(bankPubKey);
Console.WriteLine("公钥16进制字符串:" + bankSm2PublicKey);
String bankSm2PrivateKey = SM2ExtUtil.GetPrivateKey(bankPriKey);
Console.WriteLine("私钥16进制字符串:" + bankSm2PrivateKey);
工具类SM2ExtUtil:
需要nuget 引用 BouncyCastle,搜索 Portable.BouncyCastle 。
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities.Encoders;
using System; namespace CommonUtils
{
public static class SM2ExtUtil
{
/// <summary>
/// 从BASE64编码的公钥中提取16进制字符串公钥
/// </summary>
/// <param name="publicKeyBase64"></param>
/// <returns></returns>
public static String GetPublicKey(String publicKeyBase64)
{
var pubkey1= ((ECPublicKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyBase64))).Q.GetEncoded();
//把公钥的04截取掉,只保留后128位。
var pubkey2 = Hex.ToHexString(pubkey1).Substring(2).ToUpper();
return pubkey2;
} /// <summary>
/// 从BASE64编码的私钥中提取16进制字符串私钥
/// </summary>
/// <param name="PrivateKeyBase64"></param>
/// <returns></returns>
public static String GetPrivateKey(String PrivateKeyBase64)
{
var bankPriKey1 = ((ECPrivateKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(PrivateKeyBase64))).D.ToByteArray();
var bankPriKey2 = Hex.ToHexString(bankPriKey1).ToUpper();
return bankPriKey2;
}
}
}
--
如果你只需要 AsymmetricKeyParameter 对象:
AsymmetricKeyParameter mchtPubKeyObj = PublicKeyFactory.CreateKey(Convert.FromBase64String(mchtPubKeyBase64));
AsymmetricKeyParameter objPrivateKey = PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKeyBase64));
C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用)的更多相关文章
- JS实现——Base64编码解码,带16进制显示
在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...
- .NET Core RSA 签名和验签(密钥为 16 进制编码)
使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...
- 运用C语言将图片转换成16进制的字符串(base64)
最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...
- python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别
1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...
- 二进制;16进制; Byte , Python的bytes类; Base64数据编码; Bae64模块;
参考:中文维基 二进制 位操作(wiki) Byte字节 互联网数据处理:Base64数据编码 Python的模块Base64 16进制简介 python: bytes对象 字符集介绍:ascii 二 ...
- c# 字符串(含有汉字)转化为16进制编码(转)
public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text. ...
- Qt实现16进制unicode转utf-8以及国际音标编码问题
由于项目需要,需要对网络资源进行解码.遇到编码问题.研究了下基本编码原理.于是有了下面两个通用代码 1. 16进制unicode转换为utf-8中文显示 QString unicodeToUtf_8( ...
- ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记
字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...
- Android选择/拍照 剪裁 base64/16进制/byte上传图片+PHP接收图片
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/65633129认为博文实用,请点赞,请评论,请关注.谢谢! ~ 老规矩,先上GIF动态图 ...
- python - 2 8 16进制/颜色/字符编码
1.二进制 八进制 十六进制 二进制: bin() 0b10010八进制: oct() 0o10十进制: 1-100十六进制: hex() 0X53 BH 十进制转2, 8,16进制: >> ...
随机推荐
- 殷浩详解DDD:如何避免写流水账代码?
简介: 在日常工作中我观察到,面对老系统重构和迁移场景,有大量代码属于流水账代码,通常能看到开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛,接口复用 ...
- 更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性
简介: 在正文开始之前,我们先回顾一下单元化部署的概念和设计理念.在边缘计算场景下,计算节点具有很明显的地域分布属性,相同的应用可能需要部署在不同地域下的计算节点上. 作者 | 张杰(冰羽)来源 | ...
- 云原生 DevOps,模型化应用交付能力很重要!
简介: DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值. 撰稿:溪洋 云原生正在成为企业业务创新和解决规模化挑战的加速器. 云原生带来的变革绝 ...
- 开源自建/托管与商业化自研 Trace,如何选择?
简介: 随着微服务架构的兴起,服务端的调用依赖愈加复杂,为了快速定位异常组件与性能瓶颈,接入分布式链路追踪 Trace 已经成为 IT 运维领域的共识.但是,开源自建.开源托管或商业化自研 Trac ...
- MAUI 自定义绘图入门
在2022的5月份,某软正式发布了 MAUI 跨平台 UI 框架.我本来想着趁六一儿童节放假来写几篇关于 MAUI 入门的博客,可惜发现我不擅长写很入门的博客.再加上 MAUI 似乎是为了赶发布日期而 ...
- LabView之MQTT协议使用
一.MQTT概述 MQTT协议是一种消息列队传输协议,采用订阅.发布机制,订阅者只接收自己已经订阅的数据,非订阅数据则不接收,既保证了必要的数据的交换,又避免了无效数据造成的储存与处理.因此在工业物联 ...
- 创建第一个springmvc程序
创建第一个springmvc程序 1.创建父项目文件,导入依赖,删除src文件夹 pom.xml文件 <dependencies> <dependency> <group ...
- R2_ES中数据的存储测试
基本概念:ES(一): 架构及原理 关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引(Index) ⇒ 类型(Type) ⇒ 文档(Documen ...
- 跟羽夏学 Ghidra ——简述
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 更新Homebrew时候遇到的问题
问题描述: 更新Homebrew时候遇到无法访问github的问题,判定原因为DNS污Ran. fatal: unable to access 'https://github.com/Homebrew ...