SM2 加解密 一文理清

这篇具有很好参考价值的文章主要介绍了SM2 加解密 一文理清。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 给一个私钥的der文件。  

通过命令查看公私钥数据。

F:\project\simkey\now\>gmssl ec -inform der -in anca_ec_keypri.der -text
Using configuration from C:\Program Files\Common Files\SSL/openssl.cnf
read EC key
Private-Key: (256 bit)
priv:
    90:8d:22:29:03:f2:8d:bf:45:20:ff:57:77:d4:a1:
    cb:57:09:6b:99:45:51:62:bd:2b:d7:d3:60:b1:c1:
    fe:c2
pub:
    04:f8:40:b0:90:5c:da:84:bd:c3:01:c7:a9:d5:c3:
    68:fb:b0:4d:76:1b:3a:7f:2b:7b:df:5c:46:3d:8a:
    b7:83:25:16:b9:c9:df:4b:ab:53:58:c7:f0:be:e5:
    cd:4e:70:af:c6:8b:66:56:68:83:9b:cc:a2:8a:54:
    2c:6d:32:a8:a8
ASN1 OID: sm2p256v1
NIST CURVE: SM2
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIJCNIikD8o2/RSD/V3fUoctXCWuZRVFivSvX02Cxwf7CoAoGCCqBHM9V
AYItoUQDQgAE+ECwkFzahL3DAcep1cNo+7BNdhs6fyt731xGPYq3gyUWucnfS6tT
WMfwvuXNTnCvxotmVmiDm8yiilQsbTKoqA==
-----END EC PRIVATE KEY-----

公钥格式
公钥有两大种表示,通常是压缩或未压缩
1.未压缩公钥
通常以前缀04开头,后跟两个256位数字;一个用于点的x坐标,另一个用于点的y坐标。前缀04用于区分未压缩的公共密钥和以02或03开头的压缩公共密钥
即04||x||y

2.压缩公钥
y2 mod p =(x3 + 7)mod p
因为方程式的左侧是y2,所以y的解是平方根,它可以具有正值或负值。所得的y坐标可以在x轴之上或之下。因为该曲线是对称的,所以它在x轴上像镜子一样反射。因此,我们必须存储y的符号(正数或负数);因为每个选项代表一个不同的点和一个不同的公钥。在素数为p的有限域上用二进制算术计算椭圆曲线时,y坐标为偶数或奇数,对应于前面所述的正/负号。所以为了区分y的两个可能值,如果y为偶数,则存储压缩的公钥,前缀为02,如果奇数为03,则允许软件从x坐标正确推断出y坐标,然后解压缩指向该点的完整坐标的公钥。
 

2.  代码计算 31 加密数据

以下是der格式的公私钥和加密后数据。私钥包含公钥数据内容。

2022-12-29 14:39:38.806 17771-17771/com.zdxlz.safdemo D/MainActivity: onBtnEccPubKeyEncClick: 公钥:3059301306072A8648CE3D020106082A811CCF5501822D03420004F840B0905CDA84BDC301C7A9D5C368FBB04D761B3A7F2B7BDF5C463D8AB7832516B9C9DF4BAB5358C7F0BEE5CD4E70AFC68B665668839BCCA28A542C6D32A8A8
    私钥:30770201010420908D222903F28DBF4520FF5777D4A1CB57096B99455162BD2BD7D360B1C1FEC2A00A06082A811CCF5501822DA14403420004F840B0905CDA84BDC301C7A9D5C368FBB04D761B3A7F2B7BDF5C463D8AB7832516B9C9DF4BAB5358C7F0BEE5CD4E70AFC68B665668839BCCA28A542C6D32A8A8
2022-12-29 14:39:38.818 17771-17771/com.zdxlz.safdemo D/MainActivity: 加密后数据:3069022074B9BFD6D42AE771DB9789163905B7FADF2CD6852C54C89B4640A0364E27FDCC022011EFEA1D1A71DFA9B1C7ED54215A0CB1DDB9E2942B65C4715EBC91100C49E0FF042059FF842174AB4CF82F1454C4A2E7673BDD97539D8805B579CEBEA202298E701A0401F8
 

der解析得到实际的 C1 C2 C3. 

SM2非对称加密的结果由C1,C2,C3三部分组成。其中C1是根据生成的随机数计算出的椭圆曲线点,C2是密文数据,C3是SM3的摘要值。最开始的国密标准的结果是按C1,C2,C3顺序存放的,新标准的是按C1,C3,C2顺序存放的,因此我们这边在做SM2加密时新增了密文数据顺序设置,用以兼容之前的SM2算法加密。

30690220
74B9BFD6D42AE771DB9789163905B7FADF2CD6852C54C89B4640A0364E27FDCC    XCoordinate
0220
11EFEA1D1A71DFA9B1C7ED54215A0CB1DDB9E2942B65C4715EBC91100C49E0FF    YCoordinate
0420
59FF842174AB4CF82F1454C4A2E7673BDD97539D8805B579CEBEA202298E701A    HASH
0401
F8                                                                  ciphertext

sm2 加密后结构体:

gmssl3.0如下:

typedef struct {
   SM2_POINT point;
   uint8_t hash[32];
   uint8_t ciphertext_size;
   uint8_t ciphertext[SM2_MAX_PLAINTEXT_SIZE];
} SM2_CIPHERTEXT;
typedef struct {
   uint8_t x[32];
   uint8_t y[32];
} SM2_POINT;

最终输出了der格式,因此数据长度不是原数据加96.

96 = 32 (X)  + 32 (Y) + 32 (HASH) ;

加密后数据长度和加密前一致。 只是后多出上面的96字节数据。

 3. 在线工具:

SM2加解密 (goto327.top)  优先使用

SM2加密 SM2解密 - 个人工具小站 (javalang.cn)

在线SM2国密加密/解密—LZL在线工具 (lzltool.com)

使用工具解密成功:

SM2 加解密 一文理清

注:

SM2 加解密 一文理清

SM2 加解密 一文理清

从以上加解密算法流程看。  加密存在一个随机数,因此每次加密计算的结果都不一样。 解密需要使用C1 C3 C2 三个数据才可以解密成功。文章来源地址https://www.toymoban.com/news/detail-419131.html

到了这里,关于SM2 加解密 一文理清的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序安全键盘&SM2解密方式

    转载请著名出处:https://www.cnblogs.com/funnyzpc/p/17572445.html 私钥(primary key) 公钥(public key) 加密内容 需要的加密库(java) 理论上版本越高越好,如果版本较低可能出现加解密问题,这点是要注意的~ 三方实现库(gmhelper) https://github.com/ZZMarquis/gmhelper 👏这里感谢大神 Lijun Liao 写的库

    2024年02月16日
    浏览(21)
  • javascript实现SM2加密解密

    前提JavaWeb环境 前端代码 实现步骤 java

    2024年02月14日
    浏览(56)
  • 小程序软键盘&SM2解密方式

    转载请著名出处:https://www.cnblogs.com/funnyzpc/p/17572445.html 私钥(primary key) 公钥(public key) 加密内容 需要的加密库(java) 理论上版本越高越好,如果版本较低可能出现加解密问题,这点是要注意的~ 三方实现库(gmhelper) https://github.com/ZZMarquis/gmhelper 👏这里感谢大神 Lijun Liao 写的库

    2024年02月16日
    浏览(21)
  • 国密SM2前端加密解密示例

    目录 一、 安装sm2依赖 二、编写代码 1、data中绑定数据 2、公钥加密 3、私钥解密 4、按钮绑定一下,数据可见一下 三、完整代码 要改变的数据phone和过程数据copyphone,公钥publicKey和私钥privateKey 具体生成测试公钥私钥可参照SM2加解密 C1为65字节第1字节为压缩标识,这里固定为

    2024年02月03日
    浏览(42)
  • 前端使用国密sm2和sm4进行加解密

    国密SM:国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。 安装SM加密依赖 SM2 封装 将sm2的加密解密

    2024年02月08日
    浏览(39)
  • 基于hutool 封装国密sm2,sm4 加解密算法

    基于hutool 封装国密sm2,sm4 加解密算法 1. 加入依赖包 2. 编码

    2024年02月13日
    浏览(38)
  • Java实现SM2前后端加解密

    Sm2加解密原理,非对称加密,公钥加密,私钥解密。公私钥对成对生成,加密端解密端各自保存。用公钥加密必须要用对应的私钥才能解密,保证安全性。 这里我们实现的功能是前端加密,后端解密,这样前端暴露了公钥,后端持有配对的私钥,保证安全性。 1.jsp引入sm2 2

    2024年02月11日
    浏览(31)
  • 前端国密加解密使用方法SM2、SM3、SM4

       国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。      不多废话直接上干货 项目中 可能存在

    2023年04月09日
    浏览(30)
  • 国密SM2: 加解密实现 java代码完整示例

    目录  具体Java代码SM2算法加解密实现Demo: pom依赖引入 :  国家密码管理局于2010年12月17日发布了SM2算法,并要求现有的基于RSA算法的电子认证系统、密钥管理系统、应用系统进升级改造,使用支持国密SM2算法的证书。    基于ECC椭圆曲线算法的SM2算法,则普遍采用256位密钥

    2024年02月13日
    浏览(34)
  • 国密:生成SM2秘钥、加解密及加验签

    国密改造已经持续了很长时间了,相信很多从事金融科技类的程序猿都遇到过这个需求。这篇文章就为大家带来笔者对于国密改造的一些经验,主要是代码层面,有兴趣的同学可以研究下国密的算法模型! 注:本文所用到的工具类并非笔者所写! 目录 一、国密简述 二、依赖

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包