鸿蒙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

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5