HarmonyOS鸿蒙Next中SM2签名结果如何der2Raw格式转换

HarmonyOS鸿蒙Next中SM2签名结果如何der2Raw格式转换 SM2签名结果 如何der2Raw格式转换

3 回复

看下asn1-der三方库是否满足业务需求,参考文档示例:https://gitee.com/openharmony-tpc/openharmony_tpc_samples/tree/master/asn1Demo#asn1-der

asn1-der三方库:https://ohpm.openharmony.cn/#/cn/detail/%40ohos%2Fasn1-der

更多关于HarmonyOS鸿蒙Next中SM2签名结果如何der2Raw格式转换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,SM2签名结果的DER格式转换为RAW格式可以通过以下步骤实现:

  1. 解析DER格式:首先,需要解析DER格式的签名结果。DER格式的SM2签名通常包含两个整数r和s,它们被编码为ASN.1结构。

  2. 提取r和s:从解析后的ASN.1结构中提取出r和s的值。这两个值是SM2签名的核心部分。

  3. 拼接为RAW格式:将提取出的r和s按照固定的长度(通常为32字节)拼接起来,形成RAW格式的签名结果。如果r或s的长度不足32字节,需要在前面补零。

  4. 输出RAW格式:最终得到的RAW格式签名结果是一个64字节的字节数组,可以直接用于后续的处理或传输。

例如,假设DER格式的签名结果为30 44 02 20 [r] 02 20 [s],其中[r][s]分别是32字节的r和s值。提取出r和s后,直接拼接成64字节的RAW格式签名结果。

这个过程不需要依赖Java或C语言,可以直接在鸿蒙系统中使用相关的API或库来完成。

在HarmonyOS鸿蒙Next中,将SM2签名结果从DER格式转换为Raw格式,可以通过以下步骤实现:

  1. 解析DER格式:首先,使用Asn1Decoder解析DER格式的签名,获取rs两个大整数。
  2. 提取Raw数据:将rs分别转换为固定长度的字节数组(通常为32字节),并拼接在一起。
  3. 生成Raw格式:拼接后的字节数组即为Raw格式的签名结果。

示例代码:

byte[] derSignature = ...; // DER格式签名
Asn1Decoder decoder = new Asn1Decoder(derSignature);
BigInteger r = decoder.getInteger();
BigInteger s = decoder.getInteger();
byte[] rawSignature = new byte[64];
System.arraycopy(r.toByteArray(), 0, rawSignature, 0, 32);
System.arraycopy(s.toByteArray(), 0, rawSignature, 32, 32);
回到顶部