鸿蒙harmony Des3加密的使用

export class Des3 {
 static  cipherDES(key: string, iv: string, bytes: Uint8Array): Uint8Array {
    try {
      // 生成密钥
      key = key.substring(0, 8);
      let keyData = new Uint8Array(24);
      keyData.set(new util.TextEncoder().encodeInto(key))
      let symKeyBlob: cryptoFramework.DataBlob = { data: keyData };
      const symKey = cryptoFramework.createSymKeyGenerator('3DES192')// 鸿蒙只提供了3DES算法,好在可以兼容DES
        .convertKeySync(symKeyBlob) // 3DES 对密钥长度有要求,是普通DES的3倍长度

      // DES加密
      const spec: cryptoFramework.IvParamsSpec = {
        iv: { data: this.stringToUint8Array(iv) },
        algName: "IvParamsSpec"
      }
      const cipher = cryptoFramework.createCipher('3DES192|CBC|PKCS7'); // PKCS7 与 PKCS5Padding 可视为相同的填充方式,互相兼容
      cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, spec)

      const encryptData = cipher.doFinalSync({ data: bytes }).data;
      return encryptData
    } catch (ex) {
      Logger.info("请求body入参加密:" + ex)
      return new Uint8Array()
    }
  }

  static 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);
  }

}

调用

    // key
    const res = DESUtil.getInstance('key')
    // 加密
    const encrypted = res.encryptMessageWithDESCBC( res.encryptMessageWithDESCBC('pas'))
  
    // 解密
    const decrypted = res.decryptMessageWithDESCBC(res.decryptMessageWithDESCBC(encrypted))

 

上面的代码是鸿蒙官方API Des3加密,折腾半天发现密钥长度不能大于24位。不满足我的要求,我使用了ohos/crypto-js加解密。

//加密
  static  encode(str:string,key:string,iv:string){
    let newUTF8key  = CryptoJS.enc.Utf8.parse(key);
    let encrypted: string = CryptoJS.TripleDES.encrypt(str, newUTF8key, {
      //mode: CryptoJS.mode.ECB,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
      iv: CryptoJS.enc.Hex.parse(iv)
    }).ciphertext.toString(CryptoJS.enc.Base64);
    return encrypted;
  }

  //解密 str是加密后的字符串,key是加密的key,iv是加密使用的iv
  static encrypt(str:string,key:string,iv:string){
    // let UTF8key: string = CryptoJS.enc.Hex.parse(key);
    let newUTF8key  = CryptoJS.enc.Utf8.parse(key);
    let decrypted: string = CryptoJS.TripleDES.decrypt(str, newUTF8key, {
      //mode: CryptoJS.mode.ECB,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
      iv: CryptoJS.enc.Hex.parse(iv)
    }).toString(CryptoJS.enc.Utf8);
    console.log("...TripleDES decrypt:" + decrypted);
    return decrypted;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值