HarmonyOS —— SM4 加解密实现

本文详细介绍了如何使用HarmonySM4在JavaScript中实现SM4_128的对称加密和解密过程,包括密钥生成、初始化加密器、操作数据以及错误处理。
摘要由CSDN通过智能技术生成

前言

harmony SM4 实现相对简单直观,开发流程大致如下:

  1. 创建对称密钥生成器。
  2. 通过已有二进制数据生成密钥。
  3. 创建加解密生成器。
  4. 通过加解密生成器加密或解密数据。

加密实现

  static async encrypt(password: Uint8Array, clearText: Uint8Array, iv: Uint8Array): Promise<Uint8Array> {
    try {
      //1.创建密钥生成器
      let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128')
      //2.使用密钥生成器将密钥转换成 cryptoFramework.SymKey
      let symKey = await sm4Generator.convertKey({ data: password })
      //3.生成 iv等算法参数
      let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: iv }, algName: "IvParamsSpec" }
      //4.创建cipher
      let cipher = cryptoFramework.createCipher("SM4_128|CBC|PKCS5")
      //5.init cipher
      await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, paramsSpec)
      //6.加密
      let encryptText = await cipher.doFinal({ data: clearText })
      return encryptText.data
    } catch (e) {
      return new Uint8Array()
    }
  }

 解密实现

static async decrypt(password: Uint8Array, cipherText: Uint8Array, iv: Uint8Array): Promise<Uint8Array> {
    try {
      //1.创建密钥生成器
      let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128')
      //2.使用密钥生成器将密钥转换成 cryptoFramework.SymKey
      let symKey = await sm4Generator.convertKey({ data: password })
      //3.生成 iv等算法参数
      let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: iv }, algName: "IvParamsSpec" }
      //4.创建cipher
      let cipher = cryptoFramework.createCipher("SM4_128|CBC|PKCS5")
      //5.init cipher
      await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, paramsSpec)
     
      //6.解密
      let clearText = await cipher.doFinal({ data: cipherText})
      //8.返回解密结果
      return clearText.data
    } catch (e) {
      return new Uint8Array()
    }
  }

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值