HarmonyOS鸿蒙Next中如何对字符串进行md5加密

HarmonyOS鸿蒙Next中如何对字符串进行md5加密 如何对字符串进行md5加密

10 回复

楼主,针对你所提出的问题,我这里有如下网址,希望可以帮到你解决问题。

https://github.com/emn178/js-md5

更多关于HarmonyOS鸿蒙Next中如何对字符串进行md5加密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ArkTs怎么设置呢,

基本信息

<div>
    <p>ArkTs设置主要包括以下几个步骤:</p>
    <ul>
        <li>第一步:安装ArkTs</li>
        <li>第二步:配置环境变量</li>
        <li>第三步:编写Ts代码</li>
        <li>第四步:运行项目</li>
    </ul>
</div>
function getMd5String(content: string): string {
  console.log("[Promise]: getMd5String result: " + content);
  var md = cryptoFramework.createMd("MD5");
  md.update({ data: stringToUnit8Array(content) });
  md.digest((err1, mdOutput) => {
    let str = uint8ArrayToHexStr(mdOutput.data);
    let str1 = uint8ArrayToHexStr1(mdOutput.data);
    console.log("[Promise]: getMd5String result: " + mdOutput.data);
    console.log("[Promise]: getMd5String result: " + str);
    console.log("[Promise]: getMd5String result: " + str1);
  });
  return "";
}

function uint8ArrayToHexStr(data: Uint8Array): string {
  let hexString = "";
  let i: number;
  for (i = 0; i < data.length; i++) {
    let char = ('00' + data[i].toString(16)).slice(-2);
    hexString += char;
  }
  return hexString;
}

function uint8ArrayToHexStr1(data: Uint8Array): string {
  return Array.prototype.map
    .call(data, (x) => ('00' + x.toString(16)).slice(-2))
    .join('');
}

严格的来讲,上面md.digest() 应该嵌套在md.update()的回调中才保险;不然可能会出现随机错误;因为update()是异步方法,需要在回调callback()Promise.then()内处理后续操作。

另外,上面的function getMd5String()不能用返回值方式返回MD5结果;不然调用方可能无法得到正确结果;应该用回调参数传回在md.digest()的回调中生成的哈希结果,方便调用方用回调来处理成功的哈希值。

完整的MD5带回调的方法如下:

export function mdProcess(str: string, callback: Function) {
  let md;
  try {
    md = cryptoFramework.createMd('MD5');
  } catch (error) {
    Logger.error('==Crypt_'+tag, `----- createMd() err code: ${error.code}, msg: ${error.message}`);
  }
  if (md) {
    md.update({data: stringToUint8Array(str)}, (err) => {
      if (err) {
        Logger.error('==Crypt_'+tag, `----- update err code: ${err.code}, msg: ${err.message}`);
      } else {
        md.digest((err2, out) => {
          if (err2) {
            Logger.error('==Crypt_'+tag, `----- digest err code: ${err2.code}, msg: ${err2.message}`);
          } else {
            let str = uint8ArrayToHexStr(out.data);
            callback(str);
          }
        });
      }
    });
  }
}

而调用方示例如下:

mdProcess(this.curPass, (res) => {
  // 此处对MD5结果res进行后续处理:保存,验证。。。
});

受教了,

基本信息

  • 姓名: 张三
  • 年龄: 28
  • 职位: 软件工程师

技能

  • Python
  • Java
  • C++

有同步的方法么?异步的使用起来太麻烦了。

目前看API文档中没有xxSync()的方法,所以遗憾地说,只有异步方法 :-),

补充缺失的函数:

static stringToUnit8Array(str: string) {
  let arr: Array<number> = [];
  for (let i = 0; i < str.length; i++) {
    arr.push(str.charCodeAt(i));
  }
  return new Uint8Array(arr);
}

在HarmonyOS鸿蒙Next中,可以使用ohos.security.crypto模块中的Crypto类对字符串进行MD5加密。具体步骤如下:

  1. 导入ohos.security.crypto模块。
  2. 使用Crypto类的md5方法对字符串进行加密。

示例代码如下:

import crypto from '@ohos.security.crypto';

function md5Encrypt(input: string): string {
    const md5 = crypto.createHash('md5');
    md5.update(input);
    return md5.digest('hex');
}

const inputString = "example";
const encryptedString = md5Encrypt(inputString);
console.log(encryptedString);

这段代码将字符串"example"进行MD5加密,并输出加密后的结果。

在HarmonyOS鸿蒙Next中,可以通过MessageDigest类实现MD5加密。首先,创建MessageDigest实例并指定算法为“MD5”,然后使用update方法传入字符串的字节数组,最后调用digest方法获取加密后的字节数组,并转换为十六进制字符串。示例代码如下:

import ohos.security.MessageDigest;
import ohos.utils.HexEncoder;

public class Md5Util {
    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(input.getBytes());
            return HexEncoder.encodeHexString(digest);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

调用md5("your_string")即可获取MD5加密结果。

回到顶部