HarmonyOS鸿蒙Next中加解密问题

HarmonyOS鸿蒙Next中加解密问题

import cryptoFramework from ‘@ohos.security.cryptoFramework’; import buffer from ‘@ohos.buffer’;

export class Secure { static TAG: string = “Secure”;

static async aes(sSrc: Uint8Array, sKey: string, iv: string, isEncrypt: boolean): Promise<Uint8Array> { let transformation: string = “AES|CBC|PKCS5”; try { let cipher = cryptoFramework.createCipher(transformation);

  let opMode: cryptoFramework.CryptoMode =
    isEncrypt ? cryptoFramework.CryptoMode.ENCRYPT_MODE : cryptoFramework.CryptoMode.DECRYPT_MODE
  let key: cryptoFramework.Key = await Secure.getKey(sKey);
  let params: cryptoFramework.IvParamsSpec = Secure.getIV(iv);

  await cipher.init(opMode, key, params).then(
  ).catch(
    (e: Error) => {
    })

  let data: cryptoFramework.DataBlob = { data: sSrc }

  let rDataUint8Array: Uint8Array = new Uint8Array();
  await cipher.doFinal(data).then(
    (d: cryptoFramework.DataBlob) => {
      rDataUint8Array = d.data
    }).catch(
      (e: Error) => {
      })
  return rDataUint8Array;

} catch (error) {
}
return new Uint8Array();

}

private static async getKey(sKey: string) { let key: cryptoFramework.Key = {} as cryptoFramework.Key; let symKeyGenerator: cryptoFramework.SymKeyGenerator = cryptoFramework.createSymKeyGenerator(“AES128”); let pkVal = new Uint8Array(buffer.from(sKey, “utf8”).buffer); let pkBlob: cryptoFramework.DataBlob = { data: pkVal }; await symKeyGenerator.convertKey(pkBlob).then( (symKey: cryptoFramework.SymKey) => { key = symKey; }).catch( (e: Error) => { }); return key; }

private static getIV(iv: string) { let ivVal = new Uint8Array(buffer.from(iv, “utf8”).buffer); let ivBlob: cryptoFramework.DataBlob = { data: ivVal }; let params: cryptoFramework.IvParamsSpec = { algName: “AES128”, iv: ivBlob }; return params; }

static async test() { let sSrcString: string = “abcd” let sSrc: Uint8Array = new Uint8Array(buffer.from(sSrcString, “utf8”).buffer); let sKey: string = “i0pd03ph0506aPl!” let iv: string = “i0pd03p40506aPl!” let isEncrypt: boolean = true; let eB: Uint8Array = await Secure.aes(sSrc, sKey, iv, isEncrypt); // let s = Secure.aes(eB, sKey, iv, false); } }

运行 test() 方法,出 createCipher error:, {error.name:Error, error.message:build context for init fail!} ,json:{“code”:401}


更多关于HarmonyOS鸿蒙Next中加解密问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

let transformation: string = “AES|CBC|PKCS5”; 改为 “AES128|CBC|PKCS5”

let params: cryptoFramework.IvParamsSpec = { algName: "AES128", iv: ivBlob };
改为 { algName: "IvParamsSpec", iv: ivBlob }

更多关于HarmonyOS鸿蒙Next中加解密问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,加解密功能主要通过系统提供的安全模块实现。鸿蒙Next提供了多种加解密算法,包括对称加密(如AES)、非对称加密(如RSA)以及哈希算法(如SHA-256)。开发者可以通过调用security模块中的API来实现数据的加密和解密操作。

对于对称加密,AES是常用的算法,支持128、192和256位密钥长度。开发者可以使用Cipher类进行加密和解密操作,密钥通过KeyGenerator生成。

对于非对称加密,RSA是常用算法,支持密钥对生成、加密和解密操作。开发者可以使用KeyPairGenerator生成密钥对,并通过Cipher类进行加密和解密。

哈希算法如SHA-256用于生成数据的摘要,确保数据完整性。开发者可以使用MessageDigest类进行哈希计算。

鸿蒙Next的加解密API设计简洁,开发者只需关注业务逻辑,无需深入底层实现。系统会自动处理密钥管理、安全存储等问题,确保数据安全。

需要注意的是,加解密操作涉及敏感数据,开发者应遵循最佳实践,如使用安全的密钥存储机制、避免硬编码密钥等。鸿蒙Next提供了安全沙箱机制,确保应用数据隔离和安全。

以上是HarmonyOS鸿蒙Next中加解密功能的基本介绍,开发者可根据具体需求选择合适算法和API实现数据保护。

在HarmonyOS(鸿蒙)Next中,加解密功能主要通过security模块提供支持。常用的加密算法包括AES、RSA、HMAC等。开发者可以通过HUKS(HarmonyOS Universal KeyStore)进行密钥管理和加密操作。具体步骤如下:

  1. 密钥生成:使用HUKS生成密钥,支持对称和非对称密钥。
  2. 加密:调用HUKS的加密接口,传入明文和密钥进行加密。
  3. 解密:调用HUKS的解密接口,传入密文和密钥进行解密。
  4. 安全性:确保密钥存储和传输过程中使用安全通道,如TLS。

示例代码可参考HarmonyOS官方文档中的HUKS API使用指南。

回到顶部