AES加密算法实现?

利用AES实现了一套加密算法的逻辑,想咨询在HarmonyOS上怎么搞,找到了一些例子,但是他们并不是简单的使用AES,而是定制了很多参数,想问下是否可以支撑功能实现?

阅读 567
1 个回答
import { cryptoFramework } from ‘@kit.CryptoArchitectureKit’;
import { buffer, util } from ‘@kit.ArkTS’;

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)x000D
    /******/x000D
    await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
    let result = await globalCipher.doFinal({data:stringToUint8Array(text)})
    globalResult = base.encodeToStringSync(result.data);
    console.log(“解密后的明文==》” + globalResult)
  } catch (err) {
    console.log(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.log(“解密后的明文==》” + globalResult)
  } catch (err) {
    console.log(err.message)
  }
}

@Entry
@Component
struct AES128 {
  @State message: string = ‘Hello World’
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            //导入密钥
            let key = await getKey();
            let globalResult = await aesEncrypt(“测试”,key);
            aesDecrypt(globalResult,key);
          })
      }
      .width(‘100%’)
    }
    .height(‘100%’)
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进