harmony-utils之RSA,RSA加解密

简介: harmony-utils是一款专为HarmonyOS打造的高效工具库,提供丰富的实用功能,助力开发者快速构建鸿蒙应用。其RSA模块实现非对称加解密、签名验签等功能,支持密钥生成、数据加密解密及分段处理,适用于安全通信与身份验证等场景。

harmony-utils之RSA,RSA加解密

harmony-utils 简介与说明


harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
picker_utils 是harmony-utils拆分出来的一个子库,包含PickerUtil、PhotoHelper、ScanUtil。

下载安装
ohpm i @pura/harmony-utils
ohpm i @pura/picker_utils

  //全局初始化方法,在UIAbility的onCreate方法中初始化 AppUtil.init()
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    AppUtil.init(this.context);
  }

RSA 算法简介


RSA是1977年提出的非对称加密算法,基于大数分解难题设计,密钥分为公钥(e,n)和私钥(d,n),其中n为两质数乘积,d是e的模逆元。加密时将明文m通过c=m^e mod n生成密文,解密则用m=c^d mod n。其安全性依赖分解大数n的计算复杂度,常用于HTTPS密钥传输、数字签名等场景。但因计算效率低,不适合加密大量数据,且1024位密钥已可被量子计算威胁,现推荐2048位以上密钥,是公钥加密体系的开创性算法。

RSA 应用场景


RSA作为非对称加密算法,核心应用于需公钥验证、私钥保密的场景。网络通信中,HTTPS用其加密对称会话密钥,PGP加密邮件;数字签名领域,涵盖软件代码签名、区块链交易认证及电子文档签章;密钥管理上,支持SSH无密码登录与VPN密钥协商;金融场景中,银行U盾、CA证书体系依赖其实现身份验证与抗抵赖性。虽计算开销大,不适合海量数据加密,但在密钥安全传输和签名认证中不可或缺,是互联网安全体系的基础算法。

API方法与使用


generateKeyPair 生成非对称密钥KeyPair
let keyPair1 = await RSA.generateKeyPair();
let pubKeyStr1 = CryptoHelper.dataBlobToStr(keyPair1.pubKey.getEncoded(), 'hex'); //将公钥转换成base64字符串。
LogUtil.error(`pubKeyStr1: ${pubKeyStr1}`);
let priKeyStr1 = CryptoHelper.dataBlobToStr(keyPair1.priKey.getEncoded(), 'hex'); //将私钥转换成base64符符串。
LogUtil.error(`priKeyStr1: ${priKeyStr1}`);
getConvertKeyPair 获取转换的非对称密钥KeyPair
let pubKeyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDUpsnavHoapoKtOOM9NKqTt6BpPe07ZzxhMcLAm5dtFQ6zRyJwT3czHGnh1BM2FATvLTDGLkmKc/Ww27//lFbrbqBE19R/5y8UPRpbUdACZ28yqzdiaquovUndhTH/CnLzcPM7VnWO0gp3/kbg5WizkZtUTRHL+Nu4OHbbesO1wIDAQAB"; //base64字符串密钥
let priKeyStr = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMNSmydq8ehqmgq044z00qpO3oGk97TtnPGExwsCbl20VDrNHInBPdzMcaeHUEzYUBO8tMMYuSYpz9bDbv/+UVutuoETX1H/nLxQ9GltR0AJnbzKrN2Jqq6i9Sd2FMf8KcvNw8ztWdY7SCnf+RuDlaLORm1RNEcv427g4dtt6w7XAgMBAAECgYANvgsii9i3VIDADhgQe80ypFftYTD4btti9seWU7Z2K1Ddzj6axpjWpx+7/L4+md2Qde915pBoSfrQjnGJ21fX7vpqOVdDWS7lseYfM50z8ZMpZewxJNBkSGYQEazMYDfyCFMjZmB4guf/uu0B2JN/YtA8Ed7JJlkXmVLh4ReYSQJBAOIhzozpcIuGOBjylQdN+MokiL14gnAh6hiwnusD9JlTSJbQonUXkhikaf0WphxBVPSngZDdi3FYla/CDUAScBMCQQDdHwsJZ1oShtbJltaUCEsJHTWLwYm8V8tTOpHGJU8/u1mBK3pVZlwnfzzrj2oLl5iBpMHF197TPNi5gjrjM6atAkA/4pMrBixQjqu8iJQHy0R1P1sORER9j2dGcGeFN8nbo0bHrMuozu7sXU7APKzTILXypHwbRCvH6uHnFKiPqGXXAkAUsjEgQjImBcTYvWt8E4Kiab93QzgXDsiTE6pNN3TBbFGmS2F52MjLUZdsHNI6H4hAqiEQ2XGbp9hJFK1aUp1JAkEAjP4fbqrAUjGiG+EbjEffV625kACb6q9Wz+vbspMPqcr5TU2AxxSW65Yilq4pKYq8O+qXnVdOpX7DjrWA1kg2JA=="; //base64字符串密钥
let keyPair1 = await RSA.getConvertKeyPair(pubKeyStr, priKeyStr, 'base64');
let keyPair2 = RSA.getConvertKeyPairSync(pubKeyStr, priKeyStr, 'base64');
encrypt 加密
let keyPair1 = await RSA.generateKeyPair(); //生成密钥

let str1 = "鸿蒙技术交流群:xxxxxxxxxxx";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密数据

let encryptDataBlob = await RSA.encrypt(dataBlob, keyPair1.pubKey); //加密
let encryptStr = CryptoHelper.dataBlobToStr(encryptDataBlob, 'utf-8');
LogUtil.error(`加密,异步:${encryptStr}`);
decrypt 解密
let keyPair1 = await RSA.generateKeyPair(); //生成密钥

let str1 = "鸿蒙技术交流群:xxxxxxxxxxx";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8'); //待加密数据

let encryptDataBlob = await RSA.encrypt(dataBlob, keyPair1.pubKey); //加密
let decryptDataBlob = await RSA.decrypt(encryptDataBlob, keyPair1.priKey); //解密
let decryptStr = CryptoHelper.dataBlobToStr(decryptDataBlob, 'utf-8');
LogUtil.error(`解密,异步:${decryptStr}`);or(`加解密,同步:${decryptStr2}`);
encryptSegment 加密,分段
let keyPair1 = await RSA.generateKeyPair("RSA1024|PRIMES_2"); //生成密钥

let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封装了常用工具类,提供一系列简单易用的方法。帮助开发者快速构建鸿蒙应用。";
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密数据

let encryptDataBlob = await RSA.encryptSegment(dataBlob, keyPair1.pubKey, 'RSA2048|PKCS1'); //加密
let encryptStr = CryptoHelper.dataBlobToStr(encryptDataBlob, 'utf-8');
LogUtil.error(`分段加密,异步:${encryptStr}`);
decryptSegment 解密,分段
let keyPair1 = await RSA.generateKeyPair("RSA1024|PRIMES_2"); //生成密钥

let str2 = "harmony-utils,一款高效的HarmonyOS工具包,封装了常用工具类,提供一系列简单易用的方法。帮助开发者快速构建鸿蒙应用。";
let dataBlob = CryptoHelper.strToDataBlob(str2, 'utf-8'); //待加密数据

let encryptDataBlob = await RSA.encryptSegment(dataBlob, keyPair1.pubKey, 'RSA2048|PKCS1'); //加密
let decryptDataBlob = await RSA.decryptSegment(encryptDataBlob, keyPair1.priKey, 'RSA2048|PKCS1'); //解密
let decryptStr = CryptoHelper.dataBlobToStr(decryptDataBlob, 'utf-8');
LogUtil.error(`分段解密,异步:${decryptStr}`);
sign 对数据进行签名
let keyPair = await RSA.generateKeyPair(); //生成密钥

let str1 = "鸿蒙技术交流群:xxxxxxxxxxx";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8');

let signDataBlob1 = await RSA.sign(dataBlob, keyPair.priKey);
let signStr1 = CryptoHelper.dataBlobToStr(signDataBlob1, 'hex');
LogUtil.error(`签名,异步: ${signStr1}`);
verify 对数据进行验签
let keyPair = await RSA.generateKeyPair(); //生成密钥

let str1 = "鸿蒙技术交流群:xxxxxxxxxxx";
let signDataBlob1 = await RSA.sign(dataBlob, keyPair.priKey);
let signStr1 = CryptoHelper.dataBlobToStr(signDataBlob1, 'hex');

let verify1 = await RSA.verify(dataBlob, signDataBlob1, keyPair!.pubKey);
LogUtil.error(`验签,异步: ${verify1}`);
signSegment 对数据进行分段签名
let keyPair1 = await RSA.generateKeyPair(); //生成密钥

let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封装了常用工具类,提供一系列简单易用的方法。帮助开发者快速构建鸿蒙应用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主页地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(str3, 'utf-8');

let signDataBlob = await RSA.signSegment(data, keyPair.priKey);
let signStr = CryptoHelper.dataBlobToStr(signDataBlob, 'base64');
LogUtil.error(`分段签名,异步: ${signStr}`);
verifySegment 对数据进行分段验签
let keyPair1 = await RSA.generateKeyPair(); //生成密钥

let str3 = "harmony-utils,一款高效的HarmonyOS工具包,封装了常用工具类,提供一系列简单易用的方法。帮助开发者快速构建鸿蒙应用。gitee地址:https://gitee.com/tongyuyan/harmony-utils。github主页地址:https://github.com/787107497。";
let data = CryptoHelper.strToUint8Array(str3, 'utf-8');
let signDataBlob = await RSA.signSegment(data, keyPair.priKey);

let verify = await RSA.verifySegment(data, signDataBlob, keyPair.pubKey);
LogUtil.error(`分段验签,异步: ${verify}`);
recover 对数据进行签名恢复原始数据,目前仅RSA支持
let keyPair1 = await RSA.generateKeyPair(); //生成密钥

let str1 = "鸿蒙技术交流群:xxxxxxxxxxx";
let dataBlob = CryptoHelper.strToDataBlob(str1, 'utf-8');
let signDataBlob = RSA.signSync(dataBlob, keyPair.priKey, 'RSA1024|PKCS1|NoHash|OnlySign');

let recoverDataBlob = await RSA.recover(signDataBlob, keyPair.pubKey);
if (recoverDataBlob != null) {
  let recoverStr = CryptoHelper.dataBlobToStr(recoverDataBlob, 'utf-8');
  LogUtil.error(`签名恢复,异步: ${recoverStr}`);
} else {
  LogUtil.error(`签名恢复,异步: 恢复数据为空!`);
}
目录
相关文章
|
5月前
|
存储 前端开发 安全
最受欢迎的三方库之picker_utils
picker_utils 是从 harmony-utils 拆分出的子库,包含 PickerUtil、PhotoHelper 和 ScanUtil 三个模块。主要解决在不使用 picker 功能时,避免隐私政策中声明相机和存储权限的问题。支持拍照、文件选择与保存、相册操作、扫码与码图生成等功能,适配 OpenHarmony API12+,遵循 Apache License 2.0 协议。
166 0
|
5月前
|
JSON 编解码 API
harmony-utils之Base64Util,Base64工具类
`harmony-utils` 是一款功能丰富的 HarmonyOS 工具库,提供 Base64 编解码、字符串转换等实用功能,助力开发者高效构建鸿蒙应用。
195 0
|
5月前
|
JSON 安全 生物认证
harmony-utils之PhotoHelper,相册相关工具类
harmony-utils 是一款功能丰富的 HarmonyOS 工具库,助力开发者快速构建鸿蒙应用。其子模块 picker_utils 中的 PhotoHelper 提供了便捷的相册操作功能,涵盖图片视频选择、保存、读取及授权管理等常用场景,简化开发流程,提升开发效率。
229 0
|
存储 安全 算法
harmony-utils之AES,AES加解密
harmony-utils是一款专为HarmonyOS开发的高效工具库,提供包括AES加解密在内的多种实用功能,帮助开发者快速构建应用。
324 0
|
存储 算法 安全
harmony-utils之SHA,SHA工具类
harmony-utils 是一款功能丰富的 HarmonyOS 工具库,提供多种实用工具类,助力开发者快速构建鸿蒙应用。其中的 SHA 工具类支持 SHA-1、SHA-2、SHA-3 等算法,可用于数据摘要、完整性校验、数字签名和密码存储等场景。支持同步与异步操作,并提供分段处理及 HMAC 消息认证码计算功能,提升安全性和灵活性。
230 1
|
5月前
|
iOS开发
harmony-dialog预览效果
harmony-dialog 是一款简单易用、零侵入的弹窗组件,支持多种类型如确认框、提示框、输入框、选择器、加载框等,覆盖常见开发需求。
188 0
harmony-dialog预览效果
|
5月前
|
JSON 前端开发 生物认证
harmony-utils之ScanUtil,码工具类(扫码、码图生成、图片识码)
ScanUtil 是 harmony-utils 中的扫码工具类,支持调用系统扫码、生成二维码/条形码、图片识码及图像数据解析等功能。提供丰富的 API,便于开发者快速实现扫码相关功能,适用于 HarmonyOS 应用开发。
212 0
|
5月前
|
JSON 生物认证 API
harmony-utils之PickerUtil,拍照、文件选择和保存,工具类
PickerUtil 是 harmony-utils 工具库的子模块,提供拍照、相册选择、文件管理等功能,简化鸿蒙应用开发中的资源选取与保存操作。
170 0
|
JSON 算法 安全
harmony-utils之SM2,SM2加解密
harmony-utils 是一款高效易用的 HarmonyOS 工具库,提供 SM2 加解密功能。支持生成密钥、加解密、签名验签等操作,适用于金融、政务等领域,助力开发者快速构建安全应用。
397 0
|
5月前
|
前端开发 UED
HarmonyOS应用一键置灰指南
一键置灰常用于重大悼念、特殊纪念日、模拟视觉效果及系统维护等场景,可通过组件属性、窗口设置或工具库实现界面整体或局部灰度效果,操作简便且提升用户体验与情感共鸣。
259 0