HarmonyOS 鸿蒙Next 加解密Cipher

HarmonyOS 鸿蒙Next 加解密Cipher

在安卓中,加密算法为"RSA/ECB/PKCS1Padding",在鸿蒙中应该采用哪种加密算法?看文档RSA算法中并没有提供ECB模式,另外安卓中就直接是RSA,并没有说明加密长度,鸿蒙提供了RSA”、“RSA512”、RSA1024”等,我如何判断我应该是用哪种。

安卓中加密算法为"RSA/ECB/PKCS1Padding" 对应鸿蒙中的什么。

2 回复

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实例的步骤如下:

  1. 选择加密算法和模式:根据需求,选择适当的加密算法和模式,如“AES/CBC/PKCS5Padding”。

  2. 获取Cipher实例:通过鸿蒙的加密库,获取一个Cipher实例,并传入上述配置字符串。

  3. 初始化Cipher:使用密钥和可能的初始化向量(IV)来初始化Cipher实例。对于某些算法和模式,IV是必需的。

  4. 加密/解密数据:使用初始化后的Cipher实例,对输入数据进行加密或解密操作。

  5. 处理结果:加密后的数据通常是字节数组形式,解密后的数据则根据原始数据类型进行相应处理。

请注意,加解密操作涉及敏感数据,务必确保密钥和算法的安全性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部