HarmonyOS鸿蒙Next中如何用noPadding模式进行RSA加解密?
HarmonyOS鸿蒙Next中如何用noPadding模式进行RSA加解密? 我们的项目中有使用无填充模式进行RSA加解密的场景,如在iOS中进行RSA加密时指定了kSecPaddingNone参数。 在鸿蒙上只看到了文档中提及:"NoPadding:不带填充,输入的数据必须与RSA钥模(即RSA模数n的字节长度)一样长;输出数据长度与RSA钥模一样长。"文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-asym-encrypt-decrypt-spec-V5#%E5%A1%AB%E5%85%85%E6%A8%A1%E5%BC%8F%E4%B8%BAnopadding
但没有事例代码说明如何做,目前我们开发阻塞在这里,麻烦提供一段事例代码说明如何在鸿蒙上进行等价于iOS的kSecPaddingNone的RSA加密,现在iOS、android都是可以的,就鸿蒙上不行。因为涉及到客户端加密,后端解密,兼顾多端,现在我们也无法修改加密的填充模式。(此前提过RSA的无填充模式加解密,华为建议修改填充模式)
加密公钥字符串如下: xxxxxxxxxxxxxxxxxxxxxxxxxxLADCBhwKBgQxxxxxx8AgfA0a62G9Ja1p43ZV/pUzKTCXCViM/aDq2j/CN6zAebCthDDXWckvM/P+0CyRRZ4h9ffMN3jTQsHUTRg2Tbnc74A5w/1Aa63UUPxzx/nKZN9UJI3Nnk2gYIekZAlSqs8zq+b8IcQ5mbJU3+dmxx65GOO1MXr4dOcsKLwIBAw==
待加密的字符串为随机生成的16位字符串,如: 1f9baebda3ccxxxx
请尽快给一个事例代码。
更多关于HarmonyOS鸿蒙Next中如何用noPadding模式进行RSA加解密?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
需要补齐待加密字符串:
encryptRSA(pubKeyStr: string, encryptStr: string) {
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
let cipher = cryptoFramework.createCipher('RSA1024|NoPadding');
let that = new util.Base64Helper();
let pubKey = that.decodeSync(pubKeyStr);
let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKey };
rsaGenerator.convertKey(pubKeyBlob, null, (err, keyPair) => {
if (err) {
Logger.error("convertKey: error." + (err as BusinessError).code);
return;
}
//补齐待加密字符串
let planArr = new Uint8Array(128);
let arr = this.stringToUint8Array(encryptStr);
planArr.set(arr,planArr.length-arr.length);
console.log(`加密成功 pubKey `+that.encodeToStringSync(keyPair.pubKey.getEncoded().data))
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null, (err, data) => {
let input: cryptoFramework.DataBlob = { data: planArr };
cipher.doFinal(input, (err, data) => {
Logger.info(TAG, "EncryptOutPut is "+ data.data);
let result = that.encodeToStringSync(data.data)
Logger.info(TAG, "result is "+ result);
})
})
})
}
更多关于HarmonyOS鸿蒙Next中如何用noPadding模式进行RSA加解密?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用noPadding模式进行RSA加解密可以通过MbedTLS
库来实现。以下是具体步骤:
-
初始化RSA上下文:首先,需要创建并初始化一个RSA上下文对象。
-
设置RSA密钥:使用
mbedtls_rsa_import
或mbedtls_rsa_gen_key
函数导入或生成RSA密钥。 -
配置noPadding模式:在RSA上下文中,通过
mbedtls_rsa_set_padding
函数将填充模式设置为MBEDTLS_RSA_PKCS_V15
,并指定noPadding
模式。 -
执行加密或解密操作:使用
mbedtls_rsa_pkcs1_encrypt
或mbedtls_rsa_pkcs1_decrypt
函数进行加密或解密操作。在noPadding
模式下,输入数据的长度必须与RSA密钥的长度一致。 -
清理资源:操作完成后,使用
mbedtls_rsa_free
函数释放RSA上下文资源。
示例代码如下:
#include "mbedtls/rsa.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
mbedtls_rsa_context rsa;
mbedtls_entropy_context entropy;
mbedtls_ctr_drbg_context ctr_drbg;
// 初始化
mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0);
mbedtls_entropy_init(&entropy);
mbedtls_ctr_drbg_init(&ctr_drbg);
// 设置密钥
mbedtls_rsa_gen_key(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, 2048, 65537);
// 设置noPadding模式
mbedtls_rsa_set_padding(&rsa, MBEDTLS_RSA_PKCS_V15, 0);
// 加密
unsigned char input[256] = { /* 输入数据 */ };
unsigned char output[256];
mbedtls_rsa_pkcs1_encrypt(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, MBEDTLS_RSA_PUBLIC, sizeof(input), input, output);
// 解密
unsigned char decrypted[256];
mbedtls_rsa_pkcs1_decrypt(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, MBEDTLS_RSA_PRIVATE, &olen, output, decrypted, sizeof(decrypted));
// 清理
mbedtls_rsa_free(&rsa);
mbedtls_entropy_free(&entropy);
mbedtls_ctr_drbg_free(&ctr_drbg);
在HarmonyOS鸿蒙Next中,使用noPadding
模式进行RSA加解密可以通过Cipher
类实现。首先,创建Cipher
实例并设置为RSA模式,然后指定padding
为NoPadding
。示例代码如下:
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(plainText);
注意:NoPadding
模式要求明文长度必须与密钥长度一致,解密时也需使用相同模式。