• 作者:老汪软件技巧
  • 发表时间:2024-09-07 11:05
  • 浏览量:

SM2简介

SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。

随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。

SM2算法和RSA算法比较

SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小。

功能

密钥生成

加密:

随机选择一个临时私钥(临时随机数),通常是一个256位的随机数。使用临时私钥与基点相乘,得到临时公钥。将明文数据转换为椭圆曲线上的点(编码)。生成一个随机数k,与临时公钥进行点运算,得到C1点。使用接收方的公钥进行点运算,将C1点与明文数据进行异或运算,得到C2点。使用临时私钥与C1点相乘,得到一个数值。对C2点和该数值进行哈希运算,得到C3点。将C1、C2和C3点组成密文。

解密:

使用私钥与C1点相乘,得到一个数值。对C2点和该数值进行哈希运算,得到C3点。将C1、C2和C3点组成密文。使用接收方的私钥与C1点相乘,得到临时公钥。使用临时公钥进行点运算,将C1点与C2点进行异或运算,得到明文数据。

数字签名:

公钥密码算法基于_公钥密码算法的优点不包括_

对待签名数据进行哈希运算,得到哈希值。随机选择一个数值k,与基点相乘,得到点(x1, y1)。将x1的值与哈希值进行异或运算,得到一个数值。计算该数值的模反函数,得到另一个数值。将哈希值与另一个数值进行相乘,得到一个数值。使用私钥与该数值相乘,得到一个数值。使用点(x1, y1)与该数值进行点运算,得到点(x2, y2)。

将x2的值与哈希值进行比较,如果相等,则签名有效。

加密模式

在SM2算法中,有两种主要的加密模式用于加密数据,分别是C1C2C3模式(密文格式1)和C1C3C2模式(密文格式2)。

C1C2C3模式(密文格式1)缺点:C1C3C2模式(密文格式2):缺点:应用

iOS:在iOS中可以使用 GMObjC

JAVA:在JAVA中可以使用 SM2_SM3_SM4Encrypt

鸿蒙:在鸿蒙中可以使用

值得一提的是:在iOS中使用 SM2进行C1C3C2格式的加密时,返回的数据是 ASN1格式字符串以30开头 。 在JAVA中,加密后返回的是 04开头的,是未经 ASN1编码的,如果不做任何转换处理,会导致在服务端进行解密的时候,导致解密失败。

在iOS端可以做以下处理

NSString *c1c2c3 =  [GMSm2Utils asn1DecodeToC1C3C2:encryStr]
NSString *finalResult = [NSString stringWithFormat:@"04%@",c1c2c3]

将asn1编码的数据,解码为 c1c3c2顺序的字符串,然后在开头拼接上04字符串即可。

同一个算法在跨端时,可能会存在相同输入的情况下,输出不一致的情形,总体的算法都是一致的,可能会存在输出格式不一致的问题。导致得到的结果,如果遇到此类问题,我们可以多了解下算法的具体步骤和构成,有利于我们解决跨端一致性的问题。

如果觉得有收获请按如下方式给个 爱心三连::点个赞鼓励一下。:收藏文章,方便回看哦!。:评论交流,互相进步!。


上一条查看详情 +模块打包工具
下一条 查看详情 +没有了