HarmonyOS 鸿蒙Next ArkTS怎样使用加密算法对数据进行加密?

HarmonyOS 鸿蒙Next ArkTS怎样使用加密算法对数据进行加密? ArkTS怎样使用加密算法对数据进行加密?

4 回复

结合当前的编码方式,代码流程如下:

1、转换可用密钥

2、根据密钥生成加密器

3、加密

整体代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';

function stringToUint8Array(str, len=null) {
  let arr = [];
  if (len == null) {
    len = str.length
  }
  for (let i = 0; i < len; i++) {
    if (str.length > i) {
      arr.push(str.charCodeAt(i))
    } else {
      arr.push(0)
    }
  }
  return new Uint8Array(arr);
}

function aesECBEncrypt(plaintext, key) {
  let cipherAlgName = 'AES128|ECB|PKCS7';
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
  let cipher;
  
  return symKeyGenerator.convertKey({
    data: stringToUint8Array(key, 16)
  }).then(symKey => {
    try {
      cipher = cryptoFramework.createCipher(cipherAlgName);
      console.info(`xx cipher algName: ${cipher.algName}`);
      return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null)
    } catch (error) {
      console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
      return null
    }
  }).then(() => {
    return cipher.doFinal({
      data: stringToUint8Array(plaintext)
    })
  }).then(output => {
    let base64 = new util.Base64Helper();
    let result = base64.encodeToStringSync(output.data);
    return new Promise(resolve => {
      resolve(result)
    })
  }).catch(err => {
    return new Promise((_, reject) => {
      reject(err)
    })
  })
}

调用方式:

aesECBEncrypt('000','1111').then(res=>{
  console.log('aesECBEncrypt is ' + res)
}).catch(err => {
  console.log('aesECBEncrypt catch ' + err)
})

解密部分

结合当前的编码方式,代码流程如下:

1、转换可用密钥

2、根据密钥生成加密器

3、解密

整体代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';

function uint8ArrayToString(array) {
  let arrayString = '';
  for (let i = 0; i < array.length; i++) {
    arrayString += String.fromCharCode(array[i]);
  }
  return arrayString;
}

function aesECBDecrypt(encrypttext, key) {
  let cipherAlgName = 'AES128|ECB|PKCS7';
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
  let cipher;

  return symKeyGenerator.convertKey({
    data: stringToUint8Array(key, 16)
  }).then(symKey => {
    try {
      cipher = cryptoFramework.createCipher(cipherAlgName);
      console.info(`xx cipher algName: ${cipher.algName}`);
      return cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null)
    } catch (error) {
      console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
      return null
    }
  }).then(() => {
    let base64 = new util.Base64Helper();
    let result = base64.decodeSync(encrypttext);
    return cipher.doFinal({
      data: result
    })
  }).then(output => {
    let result = uint8ArrayToString(output.data)
    return new Promise(resolve => {
      resolve(result)
    })
  }).catch(err => {
    return new Promise((_, reject) => {
      reject(err)
    })
  })
}

调用方式如下:

aesECBDecrypt('v0ADs4+sKsM2FOdqz9rCQw==','1111').then(res=>{
  console.log('aesECBDecrypt is ' + res)
}).catch(err => {
  console.log('aesECBDecrypt catch ' + err)
})

参考文档:华为开发者联盟

更多关于HarmonyOS 鸿蒙Next ArkTS怎样使用加密算法对数据进行加密?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用ArkTS进行数据加密可以通过@ohos.security.cryptoFramework模块实现。该模块提供了对称加密、非对称加密、哈希算法等加密功能。

  1. 对称加密:使用cryptoFramework.createSymKeyGenerator生成对称密钥,然后通过cryptoFramework.createCipher进行加密和解密操作。支持的对称加密算法包括AES、3DES等。

  2. 非对称加密:使用cryptoFramework.createAsyKeyGenerator生成非对称密钥对,然后通过cryptoFramework.createCipher进行加密和解密操作。支持的非对称加密算法包括RSA、ECC等。

  3. 哈希算法:使用cryptoFramework.createHash进行哈希计算,支持的哈希算法包括SHA256、SHA384、SHA512等。

以下是一个使用AES对称加密的示例代码:

import cryptoFramework from '@ohos.security.cryptoFramework';

async function aesEncrypt(plainText: string, key: cryptoFramework.SymKey): Promise<Uint8Array> {
    let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, null);
    let input: cryptoFramework.DataBlob = { data: new TextEncoder().encode(plainText) };
    let output = await cipher.doFinal(input);
    return output.data;
}

async function aesDecrypt(cipherText: Uint8Array, key: cryptoFramework.SymKey): Promise<string> {
    let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
    await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key, null);
    let input: cryptoFramework.DataBlob = { data: cipherText };
    let output = await cipher.doFinal(input);
    return new TextDecoder().decode(output.data);
}

在这个示例中,aesEncrypt函数用于加密数据,aesDecrypt函数用于解密数据。cryptoFramework.createCipher用于创建加密器,init方法初始化加密模式,doFinal方法执行加密或解密操作。

在HarmonyOS鸿蒙Next中,使用ArkTS进行数据加密可以通过@ohos.security.crypto模块实现。首先,导入cryptoFramework模块,然后创建加密实例,如AES或RSA。接着,使用generateKey生成密钥,并通过cipher对象进行加密操作。示例代码如下:

import cryptoFramework from '@ohos.security.crypto';

async function encryptData(data: string, key: cryptoFramework.SymKey): Promise<Uint8Array> {
  const cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, null);
  const input = { data: new Uint8Array(Buffer.from(data)) };
  const output = await cipher.doFinal(input);
  return output.data;
}

此代码展示了如何使用AES算法对数据进行加密。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!