HarmonyOS 鸿蒙Next eftool-加密组件-RSASync(二)

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

HarmonyOS 鸿蒙Next eftool-加密组件-RSASync(二)
<markdown _ngcontent-yiv-c237="" class="markdownPreContainer">

大家好,本人是oh三方库eftool的作者,针对于最初开始的RSA而言,均采用async/await 方法来操作,广大开发者提问最多的就是可不可以是同步操作,在API12中官方也是听劝的均新增了同步操作,故eftool也紧跟其后,接下来我们进入到eftool的同步加密组件RSASync的使用

本示例使用eftool版本为API12的1.2.1-rc.2版本

首选需要引入RSASync

 import {
  RSASync
} from '[@yunkss](/user/yunkss)/eftool'
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

使用

RSASync提供了更加灵活的操作方式 针对于生成秘钥方法,可以传入期望生成秘钥的类型,不传默认生成为base64格式,支持传入basea64/hex 针对于加密后的输出字符串 也支持传入输出字符串类型,支持传入basea64/hex 针对于解密传入的key同样支持传入utf8/base64/hex格式的,其中utf8指的是普通字符串

generate2048RSAKey 生成2048位RSA的非对称密钥

let key2048 = RSASync.generate2048RSAKey();

this.message = key2048.getDataRow().publicKey;

生成的返回对象为eftool中的OutDTO对象,key.getDataRow().publicKey获取生成的2048位公钥,key.getDataRow().privateKey获取生成的2048位私钥,此时生成的秘钥为base64格式的

let key2048Hex = RSASync.generate2048RSAKey(‘hex’);

此时生成的秘钥为hex格式 <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

encode2048PKCS1 加密

let encode2048 = RSASync.encode2048PKCS1('测试RSA2048加密~~~',key2048.getDataRow().publicKey, 'base64');

生成的返回对象为eftool中的OutDTO对象,encode2048.getDataRow()获取加密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式

let encode2048Hex = RSASync.encode2048PKCS1(‘测试RSA2048-HEX加密~~~’,key2048Hex.getDataRow().publicKey, ‘hex’);

此时’hex’表示传入秘钥key的格式为hex,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64

let encode2048Hex = RSASync.encode2048PKCS1(‘测试RSA2048-HEX加密~~~’, key2048Hex.getDataRow().publicKey, ‘hex’, ‘hex’);

此时’hex’, 'hex’表示传入秘钥key的格式为hex,期望加密后的结果为hex格式,支持hex/base64

针对于pem格式的key的加密示例

let pemPubKey = <span class="hljs-string"><span class="hljs-string">`-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOKeI9M56EDZ7yLJB56lKWb180 eGfPrYiAG9IbjEEK8FfNvZuDrCGqCEXc7L/W/kojj9Fnxae5aRMAvd7PLaTD3UQC HMy+lrOq3rpeDfFiiT7zwvXft2IGTlWYn29vA5g2elb0x7+WIhwQBByubor+YAr1 eTXVu7hjXEqmrGXmgwIDAQAB -----END PUBLIC KEY-----`;

let encodePem = RSASync.encode2048PKCS1(‘测试pem格式的2048位RSA加密~~’, pemPubKey, ‘base64’, ‘hex’, true);

此处的’base64’, 'hex’表示传入的key为base64格式,true表示key同时还是pem格式,而期望加密后返回的结果为hex格式,支持hex/base64

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

decode2048PKCS1 解密

let decode2048 = RSASync.decode2048PKCS1(encode2048.getDataRow(),key2048.getDataRow().privateKey, 'base64');

生成的返回对象为eftool中的OutDTO对象,decode2048.getDataRow()获取解密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64

let decode2048Hex =RSASync.decode2048PKCS1(encode2048Hex.getDataRow(),key2048Hex.getDataRow().privateKey, ‘hex’);

此时 'hex’表示传入秘钥key的格式为hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64

let decode2048Hex =RSASync.decode2048PKCS1(encode2048Hex.getDataRow(),key2048Hex.getDataRow().privateKey, ‘hex’, ‘hex’);

此时’hex’, 'hex’表示传入秘钥key的格式为hex,待解密字符串格式为hex,支持hex/base64

针对于pem格式的key的解密示例

let pemPriKey = <span class="hljs-string"><span class="hljs-string">`-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQDOKeI9M56EDZ7yLJB56lKWb180eGfPrYiAG9IbjEEK8FfNvZuD rCGqCEXc7L/W/kojj9Fnxae5aRMAvd7PLaTD3UQCHMy+lrOq3rpeDfFiiT7zwvXf t2IGTlWYn29vA5g2elb0x7+WIhwQBByubor+YAr1eTXVu7hjXEqmrGXmgwIDAQAB AoGAS/36S67kRi6zIPc2RgoOaS8iO7gKI+4GO5qFpuva6cpPwyGZ2j4vpnooLlgC GqBe+Z7AhGzB90D45TQXlexwJ6xrXDN/9w0mCPItTfe5QxtvK2i0z9unoYXJcNwN rSbbv1mBzJHybXcZgt9J2zFnsohAFPWGKVZrhDfyiecS0pkCQQD3WMY+hZVX5CLD ojfUrfiSXDh+qd+aeo6dMYDYaOhW23oJ0OHNm6vYKZ+xiEf3OB0BduZofSWHALim qVFF1bg1AkEA1WBGYd+/FHku+t17G6xRnWuDWI6A3ZyVuGv3wfRL5W8hKiJ1Urk3 ftllxQ4YVEIgaeET/0xSQ9H5KB2px+Gq1wJAGjJHxMVnHMjnuaqLmTXXtsCXpyqc qQLD6fgdOk5aFSDnmvSJhbowCBPYevgBDzjdMZODMZvXhqXX6KbUGb5Z5QJBAJ+R OdEjtA+peFqemtvdB8PDjRwCpZgU61pZU5S2DrPrYU/TKQ3N+RRhm1u76LHKKddE POIkvzh8o+k+FaOmvU0CQBNhCHc2ufGNc88MZmTwxHpGom177f9p/YPiYcg5w3Ej 8xL+hatfA2Ls3Wg/P3gfm8raHbWzC3ge/JSk/LC/ygk= -----END RSA PRIVATE KEY-----`;

let decodePem = RSASync.decode2048PKCS1(encodePem.getDataRow(), pemPriKey, ‘base64’, ‘hex’, true);

此处的’base64’, 'hex’表示传入的key为base64格式,true表示key同时还是pem格式,而待解密的字符串格式为hex格式,支持hex/base64 <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

encode2048PKCS1Segment 加密

let encodePem = RSASync.encode2048PKCS1Segment('测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密测试pem格式的2048位RSA加密~~', pemPubKey, 'base64', 'hex', true);

生成的返回对象为eftool中的OutDTO对象,通过encodePem.getDataRow()获取加密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,加密后的结果为hex格式

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

decode2048PKCS1Segment 解密

let decodePem = RSASync.decode2048PKCS1Segment(encodePem.getDataRow(),pemPriKey, 'base64', 'hex', true);

this.message = decodePem.getDataRow();

生成的返回对象为eftool中的OutDTO对象,通过decodePem.getDataRow()获取解密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64

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

sign2048PKCS1 签名

let sign = RSASync.sign2048PKCS1('待签名的RSA的pem格式的字符串~', pemPriKey, 'base64', 'base64', true);

this.message = sign.getDataRow();

生成的返回对象为eftool中的OutDTO对象,通过sign.getDataRow()获签名的结果,此处的base64表示传入key的类型为base64,true表示同时还是pem格式的秘钥,支持utf8/base64/hex,签名的结果不传格式此时默认为base64格式,支持hex/base64 <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

verify2048PKCS1 验签

let verify = RSASync.verify2048PKCS1(sign.getDataRow(),'待签名的RSA的pem格式的字符串~', pemPubKey, 'base64', 'base64', true);

this.message = verify.getMsg();

生成的返回对象为eftool中的OutDTO对象,通过verify.getMsg()获取验签的结果,此处的base64表示传入key的类型为base64,true表示同时还是pem格式的秘钥,支持utf8/base64/hex,待验签的字符串不传格式此时默认为base64格式,支持hex/base64 <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

通过本章内容,我们已经学会了2048位RSASync的加解密以及签名验签,,下一章节我们将学习SM3Sync验签操作

如果大家有新的需求,欢迎给eftool提出issueissue提交地址

</markdown>
1 回复

在HarmonyOS开发中,对于eftool-加密组件-RSASync的使用,首先确保你已正确集成了加密组件的库到你的项目中。RSASync通常用于数据的加密与解密,特别是需要高安全性的场景。检查你的配置文件是否已正确设置密钥对(公钥和私钥),并确保在调用RSASync函数时传递了正确的参数,如数据块大小、填充模式等。同时,注意异常处理,确保能正确捕获并处理加密过程中可能出现的错误。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部