如何使用AES算法加密 HarmonyOS 鸿蒙Next
如何使用AES算法加密 HarmonyOS 鸿蒙Next
具体实现可参考如下代码:
import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 
import { buffer, util } from '@kit.ArkTS'; 
@Entry
@Component
struct AESEncryptionDecryption { 
  build() { 
    Row() { 
      Button('加解密') 
        .onClick(async () => { 
          // 导入密钥 
          let key = await getKey(); 
          // 加密 
          let globalResult = await aesEncrypt('测试', key); 
          // 解密 
          aesDecrypt(globalResult, key); 
        }) 
        .width('100%') 
        .height(50) 
    } 
    .height('100%') 
  } 
} 
export const base = new util.Base64Helper(); 
// 字节流转成可理解的字符串 
export function uint8ArrayToString(array: Uint8Array) { 
  // 将UTF-8编码转换成Unicode编码 
  let out: string = ''; 
  let index: number = 0; 
  let len: number = array.length; 
  while (index < len) { 
    let character = array[index++]; 
    switch (character >> 4) { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
      case 4: 
      case 5: 
      case 6: 
      case 7: 
        out += String.fromCharCode(character); 
        break; 
      case 12: 
      case 13: 
        out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F)); 
        break; 
      case 14: 
        out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | 
          ((array[index++] & 0x3F) << 0)); 
        break; 
      default: 
        break; 
    } 
  } 
  return out; 
} 
// 字符串转成字节流 
function stringToUint8Array(str: string) { 
  return new Uint8Array(buffer.from(str, 'utf-8').buffer); 
} 
// 获取密钥 
async function getKey() { 
  let symAlgName = 'AES128'; 
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName); 
  let dataUint8Array = stringToUint8Array('Whh82GtW/EVjBkD8'); 
  let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }; 
  let promiseSymKey = await symKeyGenerator.convertKey(keyBlob); 
  let key = base.encodeToStringSync(promiseSymKey.getEncoded().data); // 将密钥转换为base64存储 
  return key; 
} 
// 加密 
async function aesEncrypt(text: string, puKey: string): Promise<string> { 
  let globalResult = ''; 
  try { 
    let cipherAlgName = 'AES128|ECB|PKCS7'; 
    let globalCipher = cryptoFramework.createCipher(cipherAlgName); 
    let symAlgName = 'AES128'; 
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName); 
    let dataUint8Array = base.decodeSync(puKey); 
    let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }; 
    let promiseSymKey = await symKeyGenerator.convertKey(keyBlob); 
    await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null); 
    let result = await globalCipher.doFinal({ data: stringToUint8Array(text) }); 
    globalResult = base.encodeToStringSync(result.data); 
    console.info('加密后的明文:' + globalResult); 
  } catch (err) { 
    console.info(err.message); 
  } 
  return globalResult; 
} 
// 解密 
async function aesDecrypt(text: string, key: string) { 
  let globalResult = ''; 
  try { 
    let cipherAlgName = 'AES128|ECB|PKCS7'; 
    let globalCipher = cryptoFramework.createCipher(cipherAlgName); 
    let symAlgName = 'AES128'; 
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName); 
    let dataUint8Array = base.decodeSync(key); 
    let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }; 
    let promiseSymKey = await symKeyGenerator.convertKey(keyBlob); 
    await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null); 
    let plainText: cryptoFramework.DataBlob = { data: base.decodeSync(text) }; 
    let result = await globalCipher.doFinal(plainText); 
    globalResult = uint8ArrayToString(result.data); 
    console.info('解密后的明文:' + globalResult); 
  } catch (err) { 
    console.info(err.message); 
  } 
}
更多关于如何使用AES算法加密 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html
        
          2 回复
        
      
      
        uint8ArrayToString的实现太复杂了,可以参考下面代码
import { util } from '@kit.ArkTS'
export function Uint8ArrayToString(array: Uint8Array): string {
  try {
    let textDecoder = util.TextDecoder.create('utf-8')
    let ret = textDecoder.decodeToString(array)
    return ret
  } catch (error) {
    console.error(error, `error code: ${error.code}`)
    return ''
  }
}
更多关于如何使用AES算法加密 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中使用AES算法进行加密,可以通过鸿蒙提供的加解密框架实现。鸿蒙Next提供了cryptoFramework模块,支持多种加密算法,包括AES。以下是一个使用AES算法加密的简单示例:
- 
导入加解密框架: import cryptoFramework from '[@ohos](/user/ohos).security.cryptoFramework';
- 
创建AES加密器: let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128'); let symKey = symKeyGenerator.generateSymKey(); let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
- 
初始化加密器并设置密钥: cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
- 
加密数据: let plainText = 'This is a secret message'; let input = { data: stringToUint8Array(plainText) }; cipher.doFinal(input).then((output) => { let encryptedData = output.data; console.log('Encrypted Data:', uint8ArrayToString(encryptedData)); });
- 
辅助函数 stringToUint8Array和uint8ArrayToString用于字符串与Uint8Array之间的转换:function stringToUint8Array(str) { let arr = new Uint8Array(str.length); for (let i = 0; i < str.length; i++) { arr[i] = str.charCodeAt(i); } return arr; } function uint8ArrayToString(uint8Array) { return String.fromCharCode.apply(null, uint8Array); }
以上代码展示了如何在鸿蒙Next中使用AES算法进行数据加密。cryptoFramework模块提供了丰富的加解密功能,开发者可以根据需求选择合适的算法和模式。
 
        
       
                   
                   
                  

