HarmonyOS 鸿蒙Next ArkTs如何使用RSA及如何用公钥解密

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

HarmonyOS 鸿蒙Next ArkTs如何使用RSA及如何用公钥解密 如何像Android IOS一样使用公钥解密服务器下发的字符串

cke_176.png


更多关于HarmonyOS 鸿蒙Next ArkTs如何使用RSA及如何用公钥解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

建议使用三方库 agoh-crypto 中的 AegRsa.ohAegRsaEncText('要加密的内容', '公钥base64字符串'),不过可能出于安全考虑,这个库限制 RSA 公钥最小长度为 3072 位。

更多关于HarmonyOS 鸿蒙Next ArkTs如何使用RSA及如何用公钥解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


解密  不是加密,

基本信息

![图片]( "")

![图片]( "image.jpg")

为什么是公钥解密?不应该是私钥解密吗?

公私钥都有加密和解密的可能,得看具体目的。

建议看文档:

  1. 加解密算法库框架概述: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/cryptoframework-overview-0000001544583933-V2

  2. 加解密算法库框架开发指导: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/cryptoframework-guidelines-0000001544703861-V2

    =>此指导中有RSA加解密示例。简要基本步骤有:

    1) 创建加解密对象实例:`this.cipher = cryptoFramework.createCipher(alg);`
    
    2) 密钥转换:
        ```javascript
        let rsaGenerator = cryptoFramework.createAsyKeyGenerator(alg);
        rsaGenerator.convertKey(..);
        ```
        
    3) 初始化解密:`this.cipher.init(..)`
    
    4) 对数据解密:`this.cipher.doFinal(..)`
    
    注意:以上方法多为异步方法,具体使用参考下面API文档。用对异步方法,按步骤走基本就OK了。
    
  3. 框架API参考: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-cryptoframework-0000001477981409-V2

目前提供的API只能公钥加密,私钥解密,暂时还没看到私钥解密的部分。

差别只是用的密钥不同,自己变通一下。

你一看就没试过,根本变通不了,init方法有类型限制,传公钥进去直接报错 class is not match. expect class: OPENSSL.RSA.PRI_KEY, input class: OPENSSL.RSA.PUB_KEY

在HarmonyOS(鸿蒙)的ArkTs(Ark TypeScript)环境中使用RSA加密及公钥解密,可以通过以下步骤实现。注意,通常公钥用于加密,私钥用于解密,但你的问题特别提到了用公钥解密,这在标准RSA流程中是不常见的,可能是特定场景的需求,这里假设你是想了解如何使用RSA相关功能。

  1. 引入加密库: ArkTs支持使用JavaScript的加密库,比如node-rsa。首先,需要在项目中引入该库。由于ArkTs环境可能有所限制,确保所选库兼容鸿蒙系统。

  2. 生成密钥对: 使用库提供的方法生成RSA密钥对,包括公钥和私钥。

  3. 加密操作: 使用公钥对数据进行加密。通常,这是通过库的encrypt方法实现的,传入公钥和数据即可。

  4. “公钥解密”操作(非标准流程): 若确实需要用公钥解密(可能是特定协议或库的实现),需查阅所用加密库的文档,看是否有提供此类非标准方法。通常情况下,应使用私钥进行解密。

  5. 处理异常: 加密和解密过程中可能会抛出异常,需做好异常处理。

示例代码(伪代码,具体实现需根据所选库调整):

import RSA from 'node-rsa';
let key = new RSA({b: 512}); // 生成密钥对
let publicKey = key.exportKey('public');
let privateKey = key.exportKey('private');
let encrypted = key.encrypt(data, 'base64'); // 使用公钥加密
// 假设库支持,则进行“公钥解密”操作
// let decrypted = someLibraryMethod(encrypted, publicKey);

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

回到顶部