HarmonyOS鸿蒙Next中如何将base64的字符串编码成16进制的字符串

HarmonyOS鸿蒙Next中如何将base64的字符串编码成16进制的字符串 我们有如下场景,先将一个字符串进行rsa加密,得rsa加密后的密文是base64编码,然后将base64编码的字符串转换成16进制的字符串。

如:

1、原始字符串为:‘b01490d5423e5920’

2、RSA后的Base64字符串为:udHh75Uex3w1VFiTa2FjCnO4viW34bQTsu3O69eLphY6HUTMyFKt+uCmT9A7HB7y16TJZNNv2EFEfC0C3ATBP/QpI5sk3siknk5UTKp4C4irg5tlK9/rahH5+kz1k0mgOqL0h2DicCJQnYULyeG11xXnfEUYpEuIuaRWeZNT8h4=

3、将第2步中的base64字符串进行编码16进制(hex)编码后得到结果:b9d1e1ef951ec77c355458936b61630a73b8be25b7e1b413b2edceebd78ba6163a1d44ccc852adfae0a64fd03b1c1ef2d7a4c964d36fd841447c2d02dc04c13ff429239b24dec8a49e4e544caa780b88ab839b652bdfeb6a11f9fa4cf59349a03aa2f48760e27022509d850bc9e1b5d715e77c4518a44b88b9a456799353f21e

以上场景中,第3步在鸿蒙中如何实现?

或者说在鸿蒙上进行RSA加密后直接返回hex编码的字符串?在鸿蒙上的RSA加密代码如下:

static async encryptRSA(pubKeyStr: string, encryptStr: string) {

  // 初始化Base64工具实例
  let base64Helper = new util.Base64Helper();

  // 公钥转换为Uint8Array,然后包装为DataBlob类型
  let pubKeyUint8Array: Uint8Array = await base64Helper.decode(pubKeyStr)
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyUint8Array }

  // 创建RSA key生成器
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');

  // 将公钥包装数据pubKeyBlob转换成密钥对类型KeyPair
  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, null);

  // 创建 Cipher对象
  const transformation: string = `RSA1024|PKCS1`
  let cipher = cryptoFramework.createCipher(transformation);

  // 初始化加密模式,指定密钥keyPair.pubKey
  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null);

  // 包装要加密的明文
  let plainTextBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(encryptStr, 'utf-8').buffer) };

  // 传入明文,获取加密后的数据
  let encryptBlob = await cipher.doFinal(plainTextBlob);

  // 返回加密后的字符串
  const encryptedString = await base64Helper.encodeToString(encryptBlob.data)
  return encryptedString

}

更多关于HarmonyOS鸿蒙Next中如何将base64的字符串编码成16进制的字符串的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
const encryptedString = await base64Helper.encodeToString(encryptBlob.data) 这一步是将Uint8Array类型转为字符串。

string转十六进制以字符串输出可用参考:buffer.from("1234").toString('hex')

Uint8Array转16进制后以字符串输出可参考:buffer.from(encryptBlob.data).toString('hex')

详细内容参考:
[https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-buffer-V13#bufferfrom](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-buffer-V13#bufferfrom)

更多关于HarmonyOS鸿蒙Next中如何将base64的字符串编码成16进制的字符串的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以使用TextEncoderArrayBuffer将base64字符串编码成16进制字符串。首先,使用atob函数将base64字符串解码为二进制数据。然后,将二进制数据转换为Uint8Array,最后将Uint8Array中的每个字节转换为16进制字符串。

示例代码如下:

function base64ToHex(base64: string): string {
    const binaryString = atob(base64);
    const byteArray = new Uint8Array(binaryString.length);
    for (let i = 0; i < binaryString.length; i++) {
        byteArray[i] = binaryString.charCodeAt(i);
    }
    let hexString = '';
    byteArray.forEach(byte => {
        hexString += byte.toString(16).padStart(2, '0');
    });
    return hexString;
}

const base64Str = "SGVsbG8gV29ybGQ="; // 示例base64字符串
const hexStr = base64ToHex(base64Str);
console.log(hexStr); // 输出: 48656c6c6f20576f726c64

这段代码将base64字符串"SGVsbG8gV29ybGQ="转换为16进制字符串"48656c6c6f20576f726c64"

在HarmonyOS鸿蒙Next中,可以通过以下步骤将base64字符串编码为16进制字符串:

  1. 使用Base64.decode方法将base64字符串解码为字节数组。
  2. 将字节数组转换为16进制字符串,可以使用ByteArray.toHexString方法。

示例代码:

String base64Str = "SGVsbG8gV29ybGQ="; // 示例base64字符串
byte[] bytes = Base64.decode(base64Str, Base64.DEFAULT); // 解码为字节数组
String hexStr = ByteArray.toHexString(bytes); // 转换为16进制字符串
System.out.println(hexStr); // 输出16进制字符串
回到顶部