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

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

HarmonyOS 鸿蒙eftool-加密组件-RSASync(一) Next
<markdown _ngcontent-yaf-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指的是普通字符串

generateRSAKey 生成秘钥

let key1024 = RSASync.generateRSAKey();

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

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

let key1024Hex = RSASync.generateRSAKey(‘hex’);

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

encodePKCS1 加密

let encode1024 = RSASync.encodePKCS1('测试RSA1024加密~~~',key1024.getDataRow().publicKey, 'base64');

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

let encode1024Hex = RSASync.encodePKCS1(‘测试RSA1024-HEX加密~~~’,key1024Hex.getDataRow().publicKey, ‘hex’);

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

let encode1024Hex = RSASync.encodePKCS1(‘测试RSA1024-HEX加密~~~’, key1024Hex.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.encodePKCS1(‘测试pem格式的1024位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>

decodePKCS1 解密

let decode1024 = RSASync.decodePKCS1(encode1024.getDataRow(),key1024.getDataRow().privateKey, 'base64');

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

let decode1024Hex =RSASync.decodePKCS1(encode1024Hex.getDataRow(),key1024Hex.getDataRow().privateKey, ‘hex’);

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

let decode1024Hex =RSASync.decodePKCS1(encode1024Hex.getDataRow(),key1024Hex.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.decodePKCS1(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>

encodePKCS1Segment 加密

let encodePem = RSASync.encodePKCS1Segment('测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位RSA加密测试pem格式的1024位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>

decodePKCS1Segment 解密

let decodePem = RSASync.decodePKCS1Segment(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>

signPKCS1 签名

let sign = RSASync.signPKCS1('待签名的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>

verifyPKCS1 验签

let verify = RSASync.verifyPKCS1(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>

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

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

</markdown>
1 回复

HarmonyOS中的eftool加密组件RSASync主要用于实现数据的加密同步功能,它基于RSA非对称加密算法,确保数据在传输过程中的安全性和完整性。如果你在使用RSASync时遇到问题,首先请检查你的RSA密钥对是否正确生成且配对无误。同时,确认你的调用参数符合API要求,特别是密钥长度、加密模式等。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部