首页 > 其他分享 >SM2-秘钥加载、生成与转换

SM2-秘钥加载、生成与转换

时间:2024-07-11 11:44:25浏览次数:20  
标签:公钥 私钥 SM2 EC 秘钥 ----- 65 KEY 加载

1.背景

ECC 基于数学上的椭圆曲线离散对数问题,在椭圆曲线密码学 (ECC) 中,私钥通常表示为一个大整数,即所谓的 D 值。

  • 私钥 D:大整数,一个随机选择的大整数。
  • 公钥 Q:一个点,通过在椭圆曲线上执行点乘法得到的,即 Q = D * G,其中 G 是椭圆曲线的基点,D 是私钥。

即公钥是由椭圆曲线上的一个点表示,这个点由两个坐标(X 和 Y)组成。

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static KeyPair generateSm2KeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");
        keyPairGenerator.initialize(ECNamedCurveTable.getParameterSpec("sm2p256v1"));
        return keyPairGenerator.generateKeyPair();
    }

输出:

EC Private Key [b9:6b:42:25:aa:9f:fe:59:95:31:ff:65:bf:ef:67:20:6a:ed:65:55]
            X: af58ec776a5707f00fea55eaa69be1726dc1c7ec414e30012516c243e658c390
            Y: 9dd317f434b3e269f970788bb81bec09e20ad6292e8e322b07ed4bbbfccade17

EC Public Key [b9:6b:42:25:aa:9f:fe:59:95:31:ff:65:bf:ef:67:20:6a:ed:65:55]
            X: af58ec776a5707f00fea55eaa69be1726dc1c7ec414e30012516c243e658c390
            Y: 9dd317f434b3e269f970788bb81bec09e20ad6292e8e322b07ed4bbbfccade17

2.私钥

注意看上方的值,其中[b9:6b:42:25:aa:9f:fe:59:95:31:ff:65:bf:ef:67:20:6a:ed:65:55]是私钥对象的字节数组表示。

这是由 ECPrivateKey 对象的默认 toString 方法生成的表示形式,而不是私钥的实际 D 值。

即org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey的toString方法。

image-20240711094629072

日常使用的呢,是16进制的那个值。

image-20240711095010493

3.公钥

公钥就比较简单了,我们打印对象的时候直接能看到XY值。

image-20240711095232088

4.PKCS标准

上面的例子里,我们给出的公私钥是这样的,分别是。

  • 私钥的D值

  • 公钥的(X,Y)坐标。

私钥:bbea2f61951c15f75d00c10ee773e0555e8dd796ec6b717259b571a4bbfccb79
公钥:f05e6cb00b6e7dafc4df8c4d2662d1862be1c840c9e992116c1485448501bd1bc2e379f5e322d53527cc18265b70d8d08011a0f9fae4e9f506a5f3efca90e5be

有时候呀,比如我们利用openssl命令生成后,看到的会是这样。

参考我这篇文章:openssl中RSA、SM2公私钥生成及PKCS格式转换

sm2_private_pkcs1

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIDIhsqbgBrkpE0Gay6I6K2z9gftTOiwi7bS4aoK3QKj4oAoGCCqBHM9V
AYItoUQDQgAEeU+j4G8Lni1Q12/vxTwBdct5oacQtKHCf1MRsne4J1E+ghiLuIiu
VxOBD0Im6SNZHjKokV0h2jeq4b9UMGVAOg==
-----END EC PRIVATE KEY-----

sm2_private_pkcs8

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgMiGypuAGuSkTQZrL
ojorbP2B+1M6LCLttLhqgrdAqPihRANCAAR5T6PgbwueLVDXb+/FPAF1y3mhpxC0
ocJ/UxGyd7gnUT6CGIu4iK5XE4EPQibpI1keMqiRXSHaN6rhv1QwZUA6
-----END PRIVATE KEY-----

sm2_public_pkcs8

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEeU+j4G8Lni1Q12/vxTwBdct5oacQ
tKHCf1MRsne4J1E+ghiLuIiuVxOBD0Im6SNZHjKokV0h2jeq4b9UMGVAOg==
-----END PUBLIC KEY-----

具体的代码,参考我这个仓库:easy-cryptography

image-20240711112826288

标签:公钥,私钥,SM2,EC,秘钥,-----,65,KEY,加载
From: https://www.cnblogs.com/yang37/p/18295762

相关文章

  • WPF 动态加载嵌入主程序的DLL
    WPF动态加载嵌入主程序的DLL,好处是节省文件数量,坏处是启动影响加载速度。首先将DLL添加进项目,选择添加现有项,设置生成操作为“嵌入资源”。代码:publicApp(){AppDomain.CurrentDomain.AssemblyResolve+=CurrentDomain_AssemblyResolve;......
  • 玩鸣潮提示错误代码126:加载x3daudio1_7.dll失败无法打开的多个详细有效解决方法分享
    玩游戏期间你是否也有遇到过找不到x3daudio1_7.dll无法继续执行代码打不开游戏?那么遇到这个问题要怎么办?有什么方法能解决?今天详细给大家介绍一下如何解决找不到x3daudio1_7.dll文件或x3daudio1_7.dll丢失的多个不同方法!第一、x3daudio1_7.dll丢失或损坏的影响系统问题表现......
  • IDEA社区版搭建Spring工程(04-加载配置文件及加解密)
    SpringMVC加载配置文件的几种方式通过context:property-placeholde实现加载配置文件在springmvc.xml配置文件里加入context相关引用<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:conte......
  • php webman使用fileboy热加载
    1.下载fileboy文件 下载地址:https://gitee.com/dengsgo/fileboy/releases2.在工作目录创建一个文件夹,把下载的exr文件复制一份到文件夹,重命名为‘fileboy.exe’,添加系统变量PATH:   3.打开cmd命令窗口执行fileboy命令,出现以下图说明配置成功 4.切换到项目根目录,执......
  • java类的加载顺序及复杂案例(阿里)
    一.无继承关系的情况下在Java中,类的初始化顺序涉及到多个方面,包括静态变量、静态初始化块、实例变量、实例初始化块(也称为构造器初始化块或初始化块)以及构造器的执行顺序。这里是一个详细的顺序说明:静态变量和静态初始化块:当类被加载到JVM时,类的静态成员(静态变量和静态初......
  • 加载技术和机制各有特点,根据不同的应用场景和需求,开发人员可以选择合适的方式来优化程
    在Windows操作系统中,加载技术通常指的是操作系统如何加载和执行进程、驱动程序或模块的过程。这些加载技术可以根据它们的功能和执行方式进行分类:进程加载:普通进程加载:Windows通过 CreateProcess 或 CreateProcessEx 等API函数加载普通用户进程。这些进程通常从可执行文......
  • 微信小程序图片加载问题及解决方案
    引言在开发微信小程序的过程中,我们经常会遇到图片加载的问题。本文将分享一个常见的问题及其解决方法,帮助开发者避免在小程序中遇到图片加载失败或报错的情况。问题背景在开发一个微信小程序时,我遇到了一个棘手的问题:当图片的src属性被设置为一个变量时,图片无法成功加载,甚至......
  • Java中的类加载器
     类加载器1.什么是类加载器?启动类加载器(BootstrapClassLoader):这是JVM自带的类加载器,负责加载Java的核心类库,如rt.jar等。由于安全原因,启动类加载器加载的类不能被其他类加载器加载的类所引用。扩展类加载器(ExtensionClassLoader):负责加载Java的扩展类库,一般位于$JAVA_H......
  • Comfyui加载大模型的注释文件,选择模型后参数设置不再迷茫
    上一篇Comfyui基础图生图工作流只需8个节点中末尾提到了两个问题,这一篇先解决第一个问题,就是我们下载了很多大模型,选择大模型时,记不住这个大模型的推荐参数怎么办?解决方法就是使用一个自定义的大模型加载节点替换原本的基础大模型加载节点观察下面这个基于上一篇基础图生图优......
  • VSCode中 npm install 安装依赖包太慢了,一直加载不出来问题解决
    1.问题描述采用VSCode打开别人传过来的项目时,需要先加载依赖包,一般是通过终端来加载:终端中输入npminstall. 但是采用npminstall安装依赖包出现问题,一直加载不完,卡到某一地方,如图: 2.尝试解决2.1采用淘宝镜像,依旧慢,最后证书过期2.2采用pnpminstall(做了一部分)npmins......