HarmonyOS 在native层用一个已有的明文rsa私钥解密一个数据

HarmonyOS
2024-12-20 12:56:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit
OH_Huks_Result InitParamSet(struct OH_Huks_ParamSet **paramSet, const struct OH_Huks_Param *params,
uint32_t paramCount) {
  OH_Huks_Result ret = OH_Huks_InitParamSet(paramSet);
  if (ret.errorCode != OH_HUKS_SUCCESS) {
    return ret;
  }
  ret = OH_Huks_AddParams(*paramSet, params, paramCount);
  if (ret.errorCode != OH_HUKS_SUCCESS) {
    OH_Huks_FreeParamSet(paramSet);
    return ret;
  }
  ret = OH_Huks_BuildParamSet(paramSet);
  if (ret.errorCode != OH_HUKS_SUCCESS) {
    OH_Huks_FreeParamSet(paramSet);
    return ret;
  }
  return ret;
}
struct OH_Huks_Param g_testGenerateKeyParam[] = {{.tag = OH_HUKS_TAG_ALGORITHM, .uint32Param = OH_HUKS_ALG_RSA},
{.tag = OH_HUKS_TAG_PURPOSE, .uint32Param = OH_HUKS_KEY_PURPOSE_DECRYPT | OH_HUKS_KEY_PURPOSE_ENCRYPT},
{.tag = OH_HUKS_TAG_KEY_SIZE, .uint32Param = OH_HUKS_RSA_KEY_SIZE_2048},
{.tag = OH_HUKS_TAG_DIGEST, .uint32Param = OH_HUKS_DIGEST_NONE},
{.tag = OH_HUKS_TAG_IMPORT_KEY_TYPE,.uint32Param = OH_HUKS_KEY_TYPE_PRIVATE_KEY}};
static napi_value GenerateKey(napi_env env, napi_callback_info info) {
    const char *alias = "test_generate";
    struct OH_Huks_Blob aliasBlob = {.size = (uint32_t)strlen(alias), .data = (uint8_t *)alias};
struct OH_Huks_ParamSet *testGenerateKeyParamSet = nullptr;
struct OH_Huks_Result ohResult;
do {
  ohResult = InitParamSet(&testGenerateKeyParamSet, g_testGenerateKeyParam,
  sizeof(g_testGenerateKeyParam) / sizeof(OH_Huks_Param));
  if (ohResult.errorCode != OH_HUKS_SUCCESS) {
    break;
  }
  ohResult = OH_Huks_GenerateKeyItem(&aliasBlob, testGenerateKeyParamSet, nullptr);
} while (0);
OH_Huks_FreeParamSet(&testGenerateKeyParamSet);
napi_value ret;
napi_create_int32(env, ohResult.errorCode, &ret);
return ret;
}

static OH_Huks_Result HksAesCipherTestDecrypt(const struct OH_Huks_Blob *keyAlias,
const struct OH_Huks_ParamSet *decryptParamSet,
const struct OH_Huks_Blob *cipherText, struct OH_Huks_Blob *plainText) {
    uint8_t handleD[sizeof(uint64_t)] = {0};
    struct OH_Huks_Blob handleDecrypt = {sizeof(uint64_t), handleD};
OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, decryptParamSet, &handleDecrypt, nullptr);
if (ret.errorCode != OH_HUKS_SUCCESS) {
  return ret;
}
ret = OH_Huks_FinishSession(&handleDecrypt, decryptParamSet, cipherText, plainText);
return ret;
}


static napi_value ImportKey(napi_env env, napi_callback_info info) {
    (void)GenerateKey(env, info);
    const char *alias = "test_generate";
    struct OH_Huks_Blob aliasBlob = {.size = (uint32_t)strlen(alias), .data = (uint8_t *)alias};

uint8_t pubKey[OH_HUKS_RSA_KEY_SIZE_2048] = {0};
struct OH_Huks_Blob publicKey = {OH_HUKS_RSA_KEY_SIZE_2048, pubKey};
struct OH_Huks_ParamSet *testImportKeyParamSet = nullptr;
struct OH_Huks_Result ohResult;
do {
        ohResult = InitParamSet(&testImportKeyParamSet, g_testGenerateKeyParam,
                                sizeof(g_testGenerateKeyParam) / sizeof(OH_Huks_Param));
        if (ohResult.errorCode != OH_HUKS_SUCCESS) {
            break;
        }
        ohResult = OH_Huks_ExportPublicKeyItem(&aliasBlob, testImportKeyParamSet, &publicKey);
        if (ohResult.errorCode != OH_HUKS_SUCCESS) {
            break;
        }
        /* 4. Import Key */
        char newKey[] =
            "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDykqcTGUt4CEaBHRN79PH0Anbh6hvQEXIjfI6TQ67dMraOM0UACN+/M6cQfSy+wa8F0OecgiAigkVYA5sDFU+tthWj29b9KsXfBSzklOPDw+i5Y98zGHikaI3B6w9iRrJEN7IOP9IaSkA9W0GSCebrVo/ypFWNG7EYDEeSoRk8cQIDAQAB";
        struct OH_Huks_Blob newKeyAlias = {.size = (uint32_t)strlen(newKey), .data = (uint8_t *)newKey};
ohResult = OH_Huks_ImportKeyItem(&newKeyAlias, testImportKeyParamSet, &publicKey);

// 解密
static const uint32_t RSA_COMMON_SIZE = 2048;
struct OH_Huks_ParamSet *decryptParamSet = nullptr;
ohResult = InitParamSet(&decryptParamSet, g_testGenerateKeyParam,
sizeof(g_testGenerateKeyParam) / sizeof(OH_Huks_Param));
if (ohResult.errorCode != OH_HUKS_SUCCESS) {
  return nullptr;
}
char tmpData[] = "CMBk4NrxJ2TTfbNt5McoHXZBlad+mRqcWcwre1Vys0iZOBz2ZJzKwbKnlM8kjv2r4lGlSYBAhKbx+"
"Ja23Hjjjc5jaBFTrXEe35fNfCnjEkTh3IBMS3drbMjD2rE3SOAcNw7qafZSWOXn1yCDTEKCojHzECwVKRbCIBnuHHBr"
"zrxz+fVFv8icU8B1qA/OIsY2OgYQRWZupMdSplXk8abioNJJZsejfEiR6a/X631BzvGNPtx1t2U5uwoc0lgSsl2N/"
"5YDevXtq2c9D3u1Cva8Q7eE6RGqTNFmVT8dUTrDhQkSWjPKk63czZrqiy0mkLGD2xRKoRXjDyveyCmnle9UTQ==";
uint8_t plain[RSA_COMMON_SIZE] = {0};
struct OH_Huks_Blob plainText = {RSA_COMMON_SIZE, plain};

struct OH_Huks_Blob cipherText = {(uint32_t)strlen(tmpData), (uint8_t *)tmpData};

/*
 *  调用finishSession获取解密后的数据
 */
ohResult = HksAesCipherTestDecrypt(&newKeyAlias, decryptParamSet, &cipherText, &plainText);

OH_LOG_INFO(LOG_APP, "xxxxxx %{public}s", plainText.data);

} while (0);
OH_Huks_FreeParamSet(&testImportKeyParamSet);
napi_value ret;
napi_create_int32(env, ohResult.errorCode, &ret);
return ret;
}
分享
微博
QQ
微信
回复
2024-12-20 16:09:36
相关问题
SQL插入一个数据时,如何获取ID?
3216浏览 • 2回复 待解决
HarmonyOS 如何实现一个遮罩
829浏览 • 1回复 待解决
如何判断一个数组不为空?
773浏览 • 1回复 待解决
HarmonyOS 从数组中随机获取一个数
241浏览 • 1回复 待解决
利用native接口实现一个圆角矩形
2004浏览 • 1回复 待解决
如何在Native侧构建一个ArkTS对象
2635浏览 • 1回复 待解决
HarmonyOS RSA私钥加密公钥解密
593浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人