HarmonyOS 鸿蒙Next中国密sm2压缩密钥转换

HarmonyOS 鸿蒙Next中国密sm2压缩密钥转换

目前从android项目转换过来的加密方案,android使用的是sm2的压缩密钥,查看加密步骤,发现是从给定的密钥中计算得出对应的密钥曲线点坐标参数来生成密钥。

示例代码:

byte[] publicKey = ; // 33长度的byte数组,首个位置为03,对应压缩格式
//计算出对应的曲线坐标点
ECPoint q = this.mCurve.decodePoint(publicKey); 
//mDomainParams是sm2p256v1曲线的参数
return new ECPublicKeyParameters(q, this.mDomainParams); 

现在迁移到鸿蒙平台,其他参数都已经找到方法进行设置,就缺这个从压缩密钥计算曲线坐标点的方法。

直接使用android上计算出来的坐标点进行加密已经测试通过了。但是这样直接使用坐标点是不允许的,官方的demo都是使用计算好的坐标点进行。这个压缩密钥的转换,在鸿蒙平台该如何处理?


更多关于HarmonyOS 鸿蒙Next中国密sm2压缩密钥转换的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

有没有大佬帮帮忙

更多关于HarmonyOS 鸿蒙Next中国密sm2压缩密钥转换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,SM2压缩密钥的转换涉及将公钥从非压缩格式转换为压缩格式。SM2公钥通常包含X和Y坐标,压缩格式仅保留X坐标和Y坐标的符号位。具体步骤如下:

  1. 提取X坐标:从非压缩公钥中提取X坐标。
  2. 确定Y坐标符号:根据Y坐标的奇偶性确定符号位(0x02表示偶数,0x03表示奇数)。
  3. 生成压缩公钥:将符号位与X坐标拼接,形成压缩公钥。

示例代码:

byte[] compressedKey = new byte[33];
compressedKey[0] = (yIsEven ? 0x02 : 0x03);
System.arraycopy(x, 0, compressedKey, 1, 32);
回到顶部