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