HarmonyOS 鸿蒙Next 如何将明文进行rc4加密然后转换成base64字符串,也可以解密?

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将明文进行rc4加密然后转换成base64字符串,也可以解密?

如何将明文进行rc4加密然后转换成base64字符串,也可以解密?

5 回复

兄弟,可以试试下面的方法:

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字符串,也可以进行解密。

加密过程

  1. 准备明文:假设你有一个字符串 plainText 需要加密。

  2. RC4加密:使用RC4加密算法对 plainText 进行加密,生成密文 cipherText。在鸿蒙系统中,你可以使用内置或第三方RC4库实现加密。

  3. Base64编码:将 cipherText 进行Base64编码,生成Base64字符串 base64String。鸿蒙系统提供了Base64编码的API,可以直接调用。

解密过程

  1. Base64解码:将Base64字符串 base64String 进行解码,还原成密文 cipherText

  2. RC4解密:使用与加密相同的密钥,对 cipherText 进行RC4解密,还原成明文 plainText

示例代码

由于平台限制,无法直接给出完整代码。但你可以参考鸿蒙系统的API文档,找到RC4加密和Base64编码/解码的相关API,按照上述步骤进行实现。

注意事项

  • 确保使用的RC4加密库或API在鸿蒙系统中兼容。
  • Base64编码和解码操作通常较为简单,鸿蒙系统提供的API可以直接使用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部