1. 介绍
本篇将介绍RSA非对称加密,官方也给出了一些样例使用代码,可供开发者参考。
本篇从实践出发,完整的通过代码方式来深入了解HarmonyOS中的非对称加密用法。
2. 基础概念
字符串样例:RSA1024|PKCS1|MD5|MGF1_MD5
1.密钥算法 : RSA
2.密文组长度 : 1024
3.填充模式 : PKCS1
4.摘要: MD5
5.摘要掩码: MGF1_MD5
关于“RSA算法”,“填充模式”, “摘要”, "摘要掩码"的具体概念,可自行搜索。
3. 实践
加密使用的测试数据源有三个,具体见下图
1.“92字节” (即,占用了92个字节的字符串)
2.“117字节” (即,占用了117个字节的字符串)
3.“128字节” (即,占用了128个字节的字符串)
3.1 MMI入口
3.2 RSA加解密
●RSA加密算法密文分组长度有七种:512,718,1024,2048,3072,4096,8192;
●支持3种填充模式:NoPadding, PKCS1, PKCS1_OAEP;
●在PCKCS1_OAEP填充模式下,支持六种摘要:MD5, SHA1, SHA224, SHA256, SHA384, SHA512;
●在PCKCS1_OAEP填充模式下,支持六种摘要掩码:MGF1_MD5, MGF1_SHA1, MGF1_SHA224, MGF1_SHA256, MGF1_SHA384, MGF1_SHA512
本篇仅以1024密文组长度做为实践验证,默认选择“128字节”数据集
片段代码以 “RSA1024|PKCS1_OAEP|MD5|MGF1_MD5” 为例
3.2.1 加密
生成对动态密钥
//导入加密框架
import cryptoFramework from '@ohos.security.cryptoFramework';
......
//创建密钥生成器,参数为(密钥算法+密文组长度+素数,如:RSA1024|PRIMES_2)
let symKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
//生成对称密钥
let promiseSymKey = symKeyGenerator.generateKeyPair();
//获取密钥
promiseSymKey( key => {
//密钥对
this.keyPair = rsaKeyPair;
})
初始化Cipher
//创建Cipher
globalCipher = cryptoFramework.createCipher('RSA1024|PKCS1_OAEP|MD5|MGF1_MD5');
//使用公钥初始化Cipher
let mode = cryptoFramework.CryptoMode.ENCRYPT_MODE;
globalCipher.init(mode, this.keyPair.pubKey, null)
加密
//文字转换为Uint8Array
const encoder = new util.TextEncoder()
let u8a_encoder = encoder.encodeInto('测试')
//封装Uint8Array 数据,必须是一个带data属性的对象
let plainText = { data: u8a_encoder };
//开始加密
let promiseUpdate = globalCipher.doFinal(plainText);
//获取加密结果
promiseUpdate( result => {
//密文
let this.cipherText = result.data
})
至此,加密已经结束。