HarmonyOS 鸿蒙Next 加解密Cipher
HarmonyOS 鸿蒙Next 加解密Cipher
在安卓中,加密算法为"RSA/ECB/PKCS1Padding",在鸿蒙中应该采用哪种加密算法?看文档RSA算法中并没有提供ECB模式,另外安卓中就直接是RSA,并没有说明加密长度,鸿蒙提供了RSA”、“RSA512”、RSA1024”等,我如何判断我应该是用哪种。
安卓中加密算法为"RSA/ECB/PKCS1Padding" 对应鸿蒙中的什么。
RSA/ECB/PKCS1Padding 请参考以下代码demo实例
import { cryptoFramework } from '[@kit](/user/kit).CryptoArchitectureKit';
import { buffer, util } from '[@kit](/user/kit).ArkTS';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct RSACrypto {
[@State](/user/State) message: string = '点击开始';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
rsa1024Crypto()
})
}
.width('100%')
}
.height('100%')
}
}
// 加密消息
async function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) {
let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null);
let encryptData = await cipher.doFinal(plainText);
return encryptData;
}
// 解密消息
async function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) {
let decoder = cryptoFramework.createCipher('RSA1024|PKCS1');
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null);
let decryptData = await decoder.doFinal(cipherText);
return decryptData;
}
// 生成RSA密钥对
async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
console.info('convertKey success');
return keyPair;
}
async function rsa1024Crypto() {
let pkData = "xxx"
let base64 = new util.Base64Helper();
let base64skData = base64.decodeSync(skData );
let base64pkData = base64.decodeSync(pkData )
let keyPair = await genKeyPairByData(base64pkData, base64skData);
let pubKey = keyPair.pubKey;
let priKey = keyPair.priKey;
let message = " This is a long plainTest!";
// 把字符串按utf-8解码为Uint8Array
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array( buffer.from(message, 'utf-8').buffer) };
let encryptText = await encryptMessagePromise(pubKey, plainText);
let base64EncryptoText = base64.encodeToStringSync(new Uint8Array(encryptText.data))
console.error('base64 encrypted result string:' + base64EncryptoText);
let decryptText = await decryptMessagePromise(priKey, encryptText);
let baseDecrypto = base64.encodeToStringSync(decryptText.data)
console.error('base64 decrypted result string:' + baseDecrypto);
let messageDecrypted = buffer.from(decryptText.data).toString('utf-8');
console.error('decrypted result string:' + messageDecrypted);
/*if (plainText.data.toString() === decryptText.data.toString()) {
console.info('decrypt ok');
// 把Uint8Array按utf-8编码为字符串
let messageDecrypted = buffer.from(decryptText.data).toString('utf-8');
console.info('decrypted result string:' + messageDecrypted);
} else {
console.error('decrypt failed');
}*/
}
更多关于HarmonyOS 鸿蒙Next 加解密Cipher的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,关于加解密功能中的Cipher(密文)处理,主要涉及数据的加密与解密操作。鸿蒙系统提供了一套完整的加解密API接口,供开发者使用。
对于Cipher的使用,首先你需要确定加密算法的类型,如AES、RSA等,以及加密的模式(如ECB、CBC等)和填充方式(如PKCS5Padding、NoPadding等)。在鸿蒙系统中,这些参数通常通过配置字符串传递给Cipher实例。
创建一个Cipher实例的步骤如下:
-
选择加密算法和模式:根据需求,选择适当的加密算法和模式,如“AES/CBC/PKCS5Padding”。
-
获取Cipher实例:通过鸿蒙的加密库,获取一个Cipher实例,并传入上述配置字符串。
-
初始化Cipher:使用密钥和可能的初始化向量(IV)来初始化Cipher实例。对于某些算法和模式,IV是必需的。
-
加密/解密数据:使用初始化后的Cipher实例,对输入数据进行加密或解密操作。
-
处理结果:加密后的数据通常是字节数组形式,解密后的数据则根据原始数据类型进行相应处理。
请注意,加解密操作涉及敏感数据,务必确保密钥和算法的安全性。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html