HarmonyOS 鸿蒙Next RSA加密,公私钥数据类型以及转换string的问题

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

HarmonyOS 鸿蒙Next RSA加密,公私钥数据类型以及转换string的问题

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

复制

使用如上代码获取的keyPair,其中公私钥数据结构都是Unit8Array类型。目前我们应用后台接收公钥的参数要求是String类型的,我使用如下方法对公钥(rsaKeyPair.pubKey.getEncoded().data)进行转换处理,但是结果是乱码,且转换回Unit8Array后,与原数据对应不上。请问这个问题应该怎么解决? 能获取到string类型的公私钥么?或者怎么才能转换回原公钥相同的数据?

  /**

  • 字符串转成字节流 */ stringToUint8Array(str: string) { return new Uint8Array(buffer.from(str, ‘utf-8’).buffer); }

/**

  • 字节流转成可理解的字符串 */ uint8ArrayToString(array: Uint8Array): string { // 将UTF-8编码转换成Unicode编码 let out: string = “”; let index: number = 0; let len: number = array.length; while (index < len) { let character = array[index++]; switch (character >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: out += String.fromCharCode(character); break; case 12: case 13: out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F)); break; case 14: out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0)); break; default: break; } } return out; }
1 回复

在HarmonyOS 鸿蒙Next中,RSA加密公私钥数据类型及转换string的问题,可以通过以下方式处理:

首先,RSA公私钥在HarmonyOS中通常以字节数组(byte array)或特定的数据结构(如DataBlob)存在。对于公钥,若以Base64字符串形式获取,需要先解码为字节数组,再转换为DataBlob类型。

其次,关于公私钥的转换,HarmonyOS提供了cryptoFramework API。通过该API,你可以使用AsyKeyGenerator的convertKey方法,将公钥的DataBlob转换为KeyPair对象,从而获取公钥实例。

最后,若需要将密钥转换回字符串形式,通常使用Base64编码。将字节数组编码为Base64字符串,便于存储和传输。

如果在实际操作中遇到数据类型不匹配或转换错误的问题,请检查密钥的编码格式是否正确,以及使用的API是否支持当前密钥类型和长度。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部