鸿蒙harmony加解密算法 写法封装

这篇具有很好参考价值的文章主要介绍了鸿蒙harmony加解密算法 写法封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在看harmony。网络通讯最基础的数据加解密需要封装,以下研究了其写法。其实写法和flutter里 甚至android中代码写法 大同小异,具体算法可自定义修改,只展示原理。

原理:

加密:1.json字符串(待加密原文)通过base64执行decodeSync 2.通过算法转换为byte数组 3.byte转string

解密:1.string  json字符串(密文) 转byte       2.通过算法得到新byte数组         3.通过base64的encodeToStringSync 把byte转为string文章来源地址https://www.toymoban.com/news/detail-787246.html

import util from '@ohos.util';
/**
 * 加解密 位移符占位数
 */
static readonly PACKET_HEADER_SIZE: number = 5;
/**
 * 加密算法
 * @param strBuf
 * @returns
 */
public decryption(strBuf: string): string {
  var base64 = new util.Base64Helper();
  let pBuffer = base64.decodeSync(strBuf);
  var strBuffer = "";
  var pNewBuffer = new Array(pBuffer.length - CommonConstants.PACKET_HEADER_SIZE);
  let iSize = pBuffer.length;

  if (pBuffer[0] != 0) {
    for (let i = CommonConstants.PACKET_HEADER_SIZE; i < iSize; i++) {
      let t1 = ((pBuffer[i] & 0xFF) ^ ((pBuffer[0] & 0xFF) ^ (iSize - i))) % 256;
      if (t1 < 0) {
        t1 = t1 + 256;
      }
      pNewBuffer[i - CommonConstants.PACKET_HEADER_SIZE] = t1;
      let t2 = ((pNewBuffer[i - CommonConstants.PACKET_HEADER_SIZE] & 0xFF) - ((i - CommonConstants.PACKET_HEADER_SIZE) ^ (pBuffer[0] & 0xFF))) % 256;
      // 取余数时 负数 加 256
      if (t2 < 0) {
        t2 = t2 + 256;
      }
      // pNewBuffer[i - PACKET_HEADER_SIZE] = Convert.ToByte(t2);
      pNewBuffer[i - CommonConstants.PACKET_HEADER_SIZE] = t2;
    }

    strBuffer = this.byteToString(pNewBuffer);
  }
  return strBuffer;
}


/**
 *  解密算法
 * @param strBuf
 * @param bEncryption
 * @returns
 */
public encryption(strBuf: string, bEncryption: boolean): string {
  var base64 = new util.Base64Helper();
  var pSndBuf = new Array();

  pSndBuf = this.stringToByte(strBuf);

  var iSize = pSndBuf.length;
  let pTempBuffer = new Uint8Array(pSndBuf.length + CommonConstants.PACKET_HEADER_SIZE);
  if (bEncryption) {
    var rd = Math.random() * 1000;
    pTempBuffer[0] = rd % 128;
  } else {
    pTempBuffer[0] = 0;
  }
  var iLength = (iSize + CommonConstants.PACKET_HEADER_SIZE);

  var byteLength = new Array(iLength);

  pTempBuffer[1] = byteLength[0];
  pTempBuffer[2] = byteLength[1];
  if (pTempBuffer[0] != 0) {
    for (let i = 0; i < iSize; i++) {
      pTempBuffer[CommonConstants.PACKET_HEADER_SIZE + i] = (((pSndBuf[i] & 0xFF) + (i ^ ((pTempBuffer[0] & 0xFF)))) % 256);
      pTempBuffer[CommonConstants.PACKET_HEADER_SIZE + i] = (((pTempBuffer[CommonConstants.PACKET_HEADER_SIZE + i] & 0xFF) ^ ((pTempBuffer[0] & 0xFF) ^ (iSize - i))) % 256);
    }
  } else {
    for (let i = 0; i < iSize; i++) {
      pTempBuffer[CommonConstants.PACKET_HEADER_SIZE + i] = pSndBuf[i];
    }
  }
  return base64.encodeToStringSync(pTempBuffer);
}


/**
 * string转byte
 * @param str
 * @returns
 */
public stringToByte(str) {
  var bytes = new Array();
  var len, c;
  len = str.length;
  for (var i = 0; i < len; i++) {
    c = str.charCodeAt(i);
    if (c >= 0x010000 && c <= 0x10FFFF) {
      bytes.push(((c >> 18) & 0x07) | 0xf0);
      bytes.push(((c >> 12) & 0x3F) | 0x80);
      bytes.push(((c >> 6) & 0x3f) | 0x80);
      bytes.push((c & 0x3F) | 0x80);
    } else if (c >= 0x000800 && c <= 0x00FFF) {
      bytes.push(((c >> 12) & 0x07) | 0xf0);
      bytes.push(((c >> 6) & 0x3F) | 0x80);
      bytes.push((c & 0x3F) | 0x80);
    } else if (c >= 0x000800 && c <= 0x0007FF) {
      bytes.push(((c >> 6) & 0x3F) | 0x80);
      bytes.push((c & 0x3F) | 0x80);
    } else {
      bytes.push(c & 0xFF)
    }
  }
  return bytes;
}

/**
 * byte转string
 * @param str
 * @returns
 */
public byteToString(arr): string {
  if (typeof arr === 'string') {
    return arr;
  }
  var str = '',
    _arr = arr;
  for (var i = 0; i < _arr.length; i++) {
    var one = _arr[i].toString(2),
      v = one.match(/^1+?(?=0)/);
    if (v && one.length == 8) {
      var bytesLength = v[0].length;
      var store = _arr[i].toString(2).slice(7 - bytesLength);
      for (var st = 1; st < bytesLength; st++) {
        store += _arr[st + i].toString(2).slice(2);
      }
      str += String.fromCharCode(parseInt(store, 2));
      i += bytesLength - 1;
    } else {
      str += String.fromCharCode(_arr[i]);
    }
  }
  return str;
}
用法:
CommonUtils.encryption(needEncryption.toString(),true);
CommonUtils.decryption(resultJson.Body.toString());

到了这里,关于鸿蒙harmony加解密算法 写法封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为鸿蒙】HarmonyOS概述:技术特性

    来源:HarmnyOS 官网 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-features-0000000000011907 多种设备之间能够实现硬件互助、资源共享,依赖的关键技术包括分布式软总线、分布式设备虚拟化、分布式数据管理、分布式任务调度等。 分布式软总线是手机、平板、智能穿戴

    2024年01月21日
    浏览(50)
  • 华为新发布的鸿蒙与目前华为手机的鸿蒙系统有什么差异,OpenHarmony、HarmonyOS、HarmonyOS NEXT的区别详解

    最近工作中需要进行鸿蒙适配,一开始我有个疑问,今年新发布的鸿蒙系统,与目前华为手机使用的鸿蒙系统有什么差异?为什么要专门进行适配?如果大家也有类似的疑问,看完这篇就明白了。 今年华为在鸿蒙生态千帆启航仪式上正式发布了鸿蒙原生操作系统——HarmonyO

    2024年04月17日
    浏览(59)
  • 华为发布 HarmonyOS NEXT 鸿蒙星河版

    在 2024-01-18 下午于深圳举办的鸿蒙生态千帆启航仪式上,华为常务董事兼终端BG CEO余承东宣布了HarmonyOS NEXT(鸿蒙星河版)的开发者预览版面向开发者开放申请。这一版本旨在实现六大极致原生体验,包括原生精致、易用、流畅、安全、智能和互联。 余承东表示,首批鸿蒙原

    2024年01月24日
    浏览(45)
  • 非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复

    最近很多视频网站有非华为机型使用HarmonyOS鸿蒙系统的演示。其实大都是刷了HarmonyOS鸿蒙系统gsi系统。体验还可以。有些刷入后bug较多。那么这些机型是如何刷写gsi?可以参考我以往帖子 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统_gsi刷机包_安卓机

    2024年02月09日
    浏览(47)
  • HarmonyOS鸿蒙原生应用开发设计- 华为分享图标

    HarmonyOS设计文档中,为大家提供了独特的华为分享图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的华为分享图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的内容产生的侵权意外情况等,减少自主创作华为分享图标的工作量

    2024年02月08日
    浏览(68)
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第五节 (基于uni-app封装鸿蒙接口请求库)

      随着鸿蒙系统的兴起,越来越多的app会采用鸿蒙开发。而鸿蒙开发必不可少的就是调用各种接口服务。为了简化接口的调用流程,我们通常会做一层封装。今天就来讲解一下,如何用uni-app封装鸿蒙的接口请求库。   首先我们要新建一个鸿蒙项目啦!当然选择第一个空白项

    2024年02月02日
    浏览(63)
  • 【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇

    ​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 目录 HarmonyOS 4.0 技术介绍: HarmonyOS三大特征:     1.实现硬件互助,资源共享。      2. 面向开发者,实现一次开发,多端部署。  3.一套操

    2024年02月05日
    浏览(47)
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第三节 (封装TabBar JS版)

    本组件通过HML布局、CSS样式和JS逻辑封装实现一个通用的Tabbar。支持可配置的Tab项和对应页面,可以方便接入到不同页面中,提高开发效率。 HML部分采用Flex布局实现Tabbar的整体结构,包含多个Tab项。 CSS部分定义样式,包括图标大小、文字颜色等样式参数。支持后续扩展。 JS部分提

    2024年02月04日
    浏览(56)
  • [Linux]华为的系统 欧拉 鸿蒙 openEuler HarmonyOS OpenHarmony

    之前整理过《华为机器运行什么桌面系统?EulerOS openEuler LiteOS 鸿蒙 深度 UOS》,但差不多快两年了,今天再梳理下华为目前提供的主要系统: openEuler | open欧拉 定位是服务器操作系统 是基于CentOS的 Linux 发行版,开源、免费 其商业发行版由麒麟软件、统信软件等提供(如:统

    2024年02月09日
    浏览(65)
  • 华为鸿蒙HarmonyOS应用开发者高级认证试题及答案

    判断 1只要使用端云一体化的云端资源就需要支付费用(错) 2所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。(错) 3 HarmonyOS应用可以兼容OpenHarmony生态(对) 4 使用端云一体化开发,无需自己搭建服务器,并进行运维了。(对) 5基于端

    2024年02月04日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包