HarmonyOS 鸿蒙Next:如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密

如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密



关于HarmonyOS 鸿蒙Next:如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

10 回复

将服务器下发的RSA公钥字符串替换掉pubKeyStr即可实现,具体可参考如下代码:

import { buffer, util } from '@kit.ArkTS';

import { cryptoFramework } from ‘@kit.CryptoArchitectureKit’;

/**

 * 使用RSA非对称密钥(PKCS1模式)加密

 * @param message 要加密的明文数据

 * @returns 加密后的字符串,base64编码

 */

export async function encryptRSA(message: string) {

  // 服务器下发RSA公钥字符串(base64编码)

  let pubKeyStr = “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFQArGDm5BXM4jHHuZGIb/kUoqrSjXkjqPLgrDmqBFxNyYsyxvyFRO10nStQwdRkQkh5lZ5sqC1G/z6lyDPpEySTBo9S5GLZ2Tj4yinNjcMXmOwiHfyQAQo9LwdlyTedwRchg0fYewWBVTVhGcWPowT1aA+GnQhYwNmaS/iKQsNQIDAQAB”;

  // 初始化Base64工具实例

  let base64Helper = new util.Base64Helper();

  // 公钥转换为Uint8Array,然后包装为DataBlob类型

  let pubKeyBlob: cryptoFramework.DataBlob = { data: base64Helper.decodeSync(pubKeyStr) };

  // 创建RSA key生成器

  let rsaGenerator = cryptoFramework.createAsyKeyGenerator(‘RSA1024’);

  // 将公钥包装数据pubKeyBlob转换成密钥对类型KeyPair

  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, null);

  // 创建 Cipher对象

  let cipher = cryptoFramework.createCipher(‘RSA1024|PKCS1’);

  // 初始化加密模式,指定密钥keyPair.pubKey

  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null);

  // 包装要加密的明文

  let plainTextBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, ‘utf-8’).buffer) };

  // 传入明文,获取加密后的数据

  let encryptBlob = await cipher.doFinal(plainTextBlob);

  // 返回加密后的字符串

  return base64Helper.encodeToStringSync(encryptBlob.data);

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

参考链接

使用RSA非对称密钥(PKCS1模式)加解密

你好~ 请问这个RSA工具类支持分段加密和分段解密嘛?

这个有效,按照指南加密后解码不全,太好了!!!

let plainTextBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };

这句最管用

还得是官方
请问使用服务端下发的RSA私钥加密,cipher.init会直接进入错误回调,输出 {"code":401},要怎么解决呢?731291718327846_.pic.jpg4491718328075_.pic.jpg

X509EncodedKeySpec(keyBytes)你有使用X509吗

请问这个方法X509EncodedKeySpec是在哪里使用?目前代码就只有贴图那部分

请问你有解决这个问题吗

感谢分享
谢谢,帮了大忙了👍
回到顶部