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进制私钥 (锦州银行、建行轻应用)的更多相关文章

  1. JS实现——Base64编码解码,带16进制显示

    在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...

  2. .NET Core RSA 签名和验签(密钥为 16 进制编码)

    使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...

  3. 运用C语言将图片转换成16进制的字符串(base64)

    最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...

  4. python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

    1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...

  5. 二进制;16进制; Byte , Python的bytes类; Base64数据编码; Bae64模块;

    参考:中文维基 二进制 位操作(wiki) Byte字节 互联网数据处理:Base64数据编码 Python的模块Base64 16进制简介 python: bytes对象 字符集介绍:ascii 二 ...

  6. c# 字符串(含有汉字)转化为16进制编码(转)

    public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text. ...

  7. Qt实现16进制unicode转utf-8以及国际音标编码问题

    由于项目需要,需要对网络资源进行解码.遇到编码问题.研究了下基本编码原理.于是有了下面两个通用代码 1. 16进制unicode转换为utf-8中文显示 QString unicodeToUtf_8( ...

  8. ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记

    字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...

  9. Android选择/拍照 剪裁 base64/16进制/byte上传图片+PHP接收图片

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/65633129认为博文实用,请点赞,请评论,请关注.谢谢! ~ 老规矩,先上GIF动态图 ...

  10. python - 2 8 16进制/颜色/字符编码

    1.二进制 八进制 十六进制 二进制: bin() 0b10010八进制: oct() 0o10十进制: 1-100十六进制: hex() 0X53 BH 十进制转2, 8,16进制: >> ...

随机推荐

  1. 剑指offer21(Java)-调整数组顺序使奇数位于偶数前面(简单)

    题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分. 示例: 输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[ ...

  2. Spring RSocket:基于服务注册发现的 RSocket 负载均衡

    简介: RSocket 作为通讯协议的后起之秀,核心是二进制异步化消息通讯,是否也能和 Spring Cloud 技术栈结合,实现服务注册发现.客户端负载均衡,从而更高效地实现面向服务的架构?这篇文章 ...

  3. Resin反序列化链分析

    前言 Resin是一个轻量级的.高性能的开源Java应用服务器.它是由Caucho Technology开发的,旨在提供可靠的Web应用程序和服务的运行环境.和Tomcat一样是个服务器,它和hess ...

  4. dotnet 性能优化 利用哈希思想优化大对象集合相等判断性能

    利用哈希的其中一个思想,相同的对象的哈希值相同,可以用来提升一些大对象集合的进行对象相等判断的性能.大对象的相等判断指的是有某些类型的相等判断需要用到对象的很多属性或字段进行参与判断逻辑才能判断两个对 ...

  5. C51笔记-数码管#动态扫描#静态显示#中断#定时器

  6. Go语言—值类型和引用类型

    一.值类型 定义 变量直接存储的值,内存通常在栈中分配: var i = 5 -> i-->5 应用 int.float.bool.string.数组.struct 二.引用类型 1. 定 ...

  7. 【源码研读】MLIR Dialect 分层设计

    以「疑问 - 求解」的形式来组织调研,此处记录整个过程. 1. MLIR 中的 Dialect 是「分层」设计的么? 先问是不是,再谈为什么.从 LLVM 社区 可以看出,至少在做 Codegen 时 ...

  8. Linux中文件的隐藏属性

    在Linux系统中,可以使用chattr与lsattr来操作文件的隐藏属性.

  9. idea推送代码忽略指定文件,文件夹配置

    idea推送代码忽略指定文件,文件夹配置 今天碰到一个问题,配置了.gitignore文件后没有生效,整了半天,最后发现一种直接配置的方法,可以指定文件夹,或者指定文件类型 打开设置

  10. 扩展实现Unity协程的完整栈跟踪

    现如今Unity中的协程(Coroutine)方案已显得老旧,Unitask等异步方案可以做到异常捕获等yield关键字处理起来很麻烦的问题, 并且Unity官方也在开发一套异步方案,但对于临时加入到 ...