HarmonyOS 鸿蒙Next 如何将明文进行rc4加密然后转换成base64字符串,也可以解密?
HarmonyOS 鸿蒙Next 如何将明文进行rc4加密然后转换成base64字符串,也可以解密?
兄弟,可以试试下面的方法:
function decryptMessage(encryptedBase64: string, keyParam: string) {
const key = CryptoJS.enc.Utf8.parse(keyParam);
// 直接使用Base64编码的字符串进行解密
const decrypted = CryptoJS.RC4.decrypt(encryptedBase64, key).toString(CryptoJS.enc.Utf8);
return decrypted;
}
function encryptMessage(plainText: string, keyParam: string) {
const key = CryptoJS.enc.Utf8.parse(keyParam);
const wordArray = CryptoJS.enc.Utf8.parse(plainText);
const encrypted = CryptoJS.RC4.encrypt(wordArray, key).ciphertext.toString(CryptoJS.enc.Base64);
return encrypted;
}
更多关于HarmonyOS 鸿蒙Next 如何将明文进行rc4加密然后转换成base64字符串,也可以解密?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我在论坛上找到的是直接通过CryptoJS.RC4.encrypt加解密string类型的,这种加解密之前先parse的方式我来试下。
这个方法如何适配来解密安卓端的rc4加密文件啊?比如我鸿蒙侧从服务器下载文件到沙箱后,怎么进行解密呢?
使用上面的解密方法前需要先转换下需要解密的文本,比如:转换成base64字符串。 可以参考下面的代码:
import { fileIo } from '@kit.CoreFileKit';
import { promptAction } from '@kit.ArkUI';
import { CryptoJS } from '@ohos/crypto-js';
import { buffer, util } from '@kit.ArkTS';
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@State encryptText: string = ""
@State encryptedFilePath: string = ''
@State FilePath: string = ''
/**
* 本地使用rawfile文件复制到沙箱
*/
copyFileFromRawToSandbox(): void {
let arr = getContext(this).resourceManager
.getRawFileContentSync("test"); //将已加密的文件放在rawfile文件夹中
// 目标文件路径(应用沙箱目录)
const sandboxFilePath = getContext().filesDir + '/test'; // 替换为你的目标文件名
let fd = fileIo.openSync(sandboxFilePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE).fd
//将rawfile文件夹下的文件复制到沙箱中,模拟下载到沙箱的已加密文件
let buff = buffer.from(arr).buffer as ArrayBuffer
fileIo.writeSync(fd, buff)
fileIo.closeSync(fd)
this.encryptedFilePath = sandboxFilePath
}
build() {
Column({ space: 10 }) {
Text('get').onClick(async () => {
this.copyFileFromRawToSandbox()
promptAction.showToast({ message: 'get file content success' })
}).fontSize(20).margin(20).fontWeight(FontWeight.Bold)
Text('RC4 decrypt').fontSize(20).margin(20).fontWeight(FontWeight.Bold).onClick(async () => {
//读取并解密沙箱中指定文件的数据
this.decodeDataFromSandbox(this.encryptedFilePath);
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
/**
* 解密指定沙箱文件的数据
* @param filePath
*/
private decodeDataFromSandbox(filePath: string) {
let stat = fileIo.statSync(filePath);
let fd = fileIo.openSync(this.encryptedFilePath, fileIo.OpenMode.READ_ONLY).fd;
let buf = new ArrayBuffer(stat.size);
let num = fileIo.readSync(fd, buf);
let unit8array = new Uint8Array(buf);
//将加密的数据进行转换
let word = CryptoJS.lib.WordArray.create(unit8array);
let str12 = CryptoJS.enc.Base64.stringify(word);
//解密数据
let content = decryptMessage(str12, "*********");
console.log('RC4 decrypt: ' + content);
}
}
/**
* rc4解密方法
* @param encryptedBase64
* @param keyParam
* @returns
*/
function decryptMessage(encryptedBase64: string, keyParam: string) {
const key = CryptoJS.enc.Utf8.parse(keyParam);
// 直接使用Base64编码的字符串进行解密
const decrypted = CryptoJS.RC4.decrypt(encryptedBase64, key).toString(CryptoJS.enc.Utf8);
return decrypted;
}
/**
* rc4加密方法
* @param plainText
* @param keyParam
* @returns
*/
function encryptMessage(plainText: string, keyParam: string) {
const key = CryptoJS.enc.Utf8.parse(keyParam);
const wordArray = CryptoJS.enc.Utf8.parse(plainText);
const encrypted = CryptoJS.RC4.encrypt(wordArray, key).ciphertext.toString(CryptoJS.enc.Base64);
return encrypted;
}
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
在HarmonyOS 鸿蒙Next中,你可以使用以下步骤将明文进行RC4加密然后转换成Base64字符串,也可以进行解密。
加密过程
-
准备明文:假设你有一个字符串
plainText
需要加密。 -
RC4加密:使用RC4加密算法对
plainText
进行加密,生成密文cipherText
。在鸿蒙系统中,你可以使用内置或第三方RC4库实现加密。 -
Base64编码:将
cipherText
进行Base64编码,生成Base64字符串base64String
。鸿蒙系统提供了Base64编码的API,可以直接调用。
解密过程
-
Base64解码:将Base64字符串
base64String
进行解码,还原成密文cipherText
。 -
RC4解密:使用与加密相同的密钥,对
cipherText
进行RC4解密,还原成明文plainText
。
示例代码
由于平台限制,无法直接给出完整代码。但你可以参考鸿蒙系统的API文档,找到RC4加密和Base64编码/解码的相关API,按照上述步骤进行实现。
注意事项
- 确保使用的RC4加密库或API在鸿蒙系统中兼容。
- Base64编码和解码操作通常较为简单,鸿蒙系统提供的API可以直接使用。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html