鸿蒙ArkTS Api9 AES CBC 加密

2023-10-18 09:45
文章标签 aes 加密 鸿蒙 arkts api9 cbc

本文主要是介绍鸿蒙ArkTS Api9 AES CBC 加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

鸿蒙ArkTS Api9 AES CBC 加密

由于鸿蒙ArkTS是javascript编写的,因此总是感觉会被抓包破解了,不过这个问题通过提了个工单问了一下,目前鸿蒙编译完成之后的包是无法获取到其内部代码的。因此就能够放心的把加密的密钥给扔在里边了。
所以研究了一下目前的鸿蒙加密算法怎么实现。
以下以 AES 128位 CBC 模式 加密为例。

密钥不足的时候以 0x00 填充。

加解密算法库框架

加解密算法库框架开发指导

参考文档

加密部分

结合当前鸿蒙的编码方式,代码流程如下:

  1. 转换可用密钥
  2. 生成iv
  3. 根据密钥生成加密器
  4. 加密

整体代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';// 把密钥、明文等转换成输入数据需要的格式
function 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);
}// promise形式调用
function aesCBCEncrypt(plaintext, key, iv) {let cipherAlgName = 'AES128|CBC|PKCS7';let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')let ivParam: cryptoFramework.IvParamsSpec = {algName: 'IvParamsSpec',iv: {data: stringToUint8Array(iv, 16)}}var cipher;return symKeyGenerator.convertKey({data: stringToUint8Array(key, 16)}).then(symKey => {try {cipher = cryptoFramework.createCipher(cipherAlgName);console.info(`xx cipher algName: ${cipher.algName}`);} catch (error) {console.error(`xx createCipher failed, ${error.code}, ${error.message}`);return null}return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParam).then(() => {return cipher.doFinal({data: stringToUint8Array(plaintext)})}).then(output => {let base64 = new util.Base64Helper();let result = base64.encodeToStringSync(output.data);return new Promise((resolve) => {resolve(result)})}).catch(err => {return new Promise((_, reject) => {reject(err)})})}).catch(err => {return new Promise((_, reject) => {reject(err)})})
}

调用方式:

aesCBCEncrypt('000','1111000000000000','0000000000000000').then(res=>{console.log('aesCBCEncrypt is ' + res)
}).catch(err => {console.log('aesCBCEncrypt catch ' + err)
})// ===> MXROfa/ujWkb69CTvl8aig==

解密部分

结合当前鸿蒙的编码方式,代码流程如下:

  1. 转换可用密钥
  2. 生成iv
  3. 根据密钥生成加密器
  4. 解密

整体代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';// 解密内容转换成字符串
function uint8ArrayToString(array) {let arrayString = '';for (let i = 0; i < array.length; i++) {arrayString += String.fromCharCode(array[i]);}return arrayString;
}function aesCBCDecrypt(encrypttext, key, iv) {let cipherAlgName = 'AES128|CBC|PKCS7';let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')let ivParam: cryptoFramework.IvParamsSpec = {algName: 'IvParamsSpec',iv: {data: stringToUint8Array(iv, 16)}}var cipher;return symKeyGenerator.convertKey({data: stringToUint8Array(key, 16)}).then(symKey => {try {cipher = cryptoFramework.createCipher(cipherAlgName);console.info(`xx cipher algName: ${cipher.algName}`);} catch (error) {console.error(`xx createCipher failed, ${error.code}, ${error.message}`);return null}return cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParam).then(() => {let base64 = new util.Base64Helper();let result = base64.decodeSync(encrypttext);return cipher.doFinal({data: result})}).then(output => {let result = uint8ArrayToString(output.data)return new Promise((resolve) => {resolve(result)})}).catch(err => {return new Promise((_, reject) => {reject(err)})})}).catch(err => {return new Promise((_, reject) => {reject(err)})})
}

调用方式如下:

aesCBCDecrypt('MXROfa/ujWkb69CTvl8aig==','1111000000000000','0000000000000000').then(res=>{console.log('aesCBCDecrypt is ' + res)
}).catch(err => {console.log('aesCBCDecrypt catch ' + err)
})

这篇关于鸿蒙ArkTS Api9 AES CBC 加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231771

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

ja-netfilter的前世今生和非对称加密的欺骗原理

文章目录 ja-netfilter起源官网插件插件配置文件插件的综合应用更多用法 非对称加密欺骗原理非对称加密和数字证书激活过程和欺骗手段分析代码示例第一步:生成自签名证书脚本第二步:使用自签名证书对产品激活信息进行签名 样例数据样例激活码(注:用于代码演示,直接粘贴到JetBrains 家 IDE 中无法完成激活!不用试,肯定提示无效,无法激活!!)样例power.conf(配合ja-ne

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 @CustomDialog 修饰的组件 ,并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController,加载组件,open()-> 打开对话框 , close() -> 关闭对话框 #定义弹窗 (CustomDialog)是什么? CustomDialog是自定义弹窗,可用于广告、中

Linux加密框架设计与实现

本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:原文作者是独孤九贱大佬 原文地址:http://bbs.chinaunix.net/thread-3627341-1-1.html