HarmonyOS 鸿蒙Next 求sm2算法加密demo
HarmonyOS 鸿蒙Next 求sm2算法加密demo
sm2加解密demo可参考以下链接https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/crypto-sm2-asym-encrypt-decrypt-V13
1.公钥私钥不用转成unit8array,文档中是用unit8array数据生成公钥和私钥,也可使用随机生成的公钥和私钥加解密,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/crypto-generate-asym-key-pair-randomly-V13
2.签名验签可以参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/crypto-sm2-sign-sig-verify-pkcs1-V13
那就不用将公钥和私钥转换为unit8arrary格式,直接进行加解密就可以了
可以参考该文档使用已有的公钥私钥串生成keypair:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/crypto-generate-asym-key-pair-from-key-spec-V13#%E6%A0%B9%E6%8D%AE%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%90%8D%E7%94%9F%E6%88%90sm2%E5%AF%86%E9%92%A5%E5%AF%B9
需要接口返回130位的公钥对象,去掉前缀04,然后后面的分成两个64位:
x坐标:2e6d.....
y坐标:2e6d.....
然后再在x y前面加上0x,如例子所示:
x坐标:0x2e6d.....
y坐标:0x2e6d.....
Sm2公钥国标是64字节的,您提供的公钥不符合国标,需要自行处理。
如果是66位公钥的话需要自行解压,如果从安卓那边拿到的130 位字符的公钥,去掉04 就是符合鸿蒙规范的。
针对您提到的HarmonyOS鸿蒙Next系统中SM2算法加密的需求,以下是一个简化的SM2加密Demo示例代码框架,用于展示如何在鸿蒙系统中实现SM2加密。请注意,这只是一个基本框架,具体实现需要根据鸿蒙系统的API和您的实际需求进行调整。
#include <openssl/sm2.h>
#include <openssl/err.h>
// 初始化OpenSSL库(具体初始化方式根据鸿蒙系统的OpenSSL版本调整)
// ...
// 加载公钥和私钥(这里假设已经从文件或内存中加载)
EVP_PKEY *pkey = NULL;
// pkey加载逻辑...
// 待加密数据
unsigned char *plaintext = (unsigned char *)"Hello, HarmonyOS!";
size_t plaintext_len = strlen((char *)plaintext);
// 加密数据
unsigned char *ciphertext = NULL;
size_t ciphertext_len;
SM2_PKEY_CTX *ctx = SM2_PKEY_CTX_new_id(EVP_PKEY_SM2, NULL);
SM2_PKEY_encrypt_init(ctx);
SM2_PKEY_CTX_set_pubkey(ctx, pkey);
SM2_PKEY_encrypt(ctx, NULL, &ciphertext_len, plaintext, plaintext_len);
ciphertext = (unsigned char *)OPENSSL_malloc(ciphertext_len);
SM2_PKEY_encrypt(ctx, ciphertext, &ciphertext_len, plaintext, plaintext_len);
// 清理资源
// ...
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html