请问有没有HarmonyOS鸿蒙Next中sm3摘要算法的例子?

请问有没有HarmonyOS鸿蒙Next中sm3摘要算法的例子? 目前有用到SM3算法,但没找到合适的代码示例,不知道具体用法。

3 回复

可以参考

import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@ohos.base';
import util from '@ohos.util';
import buffer from '@ohos.buffer';

function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str,'utf-8').buffer);
}

let base64 = new util.Base64Helper();

// 以Promise方式完成摘要
function doMdByPromise() {
  // 摘要算法名称。
  let mdAlgName = "SM3";
  // 要进行摘要的数据。
  let message = "Hello,中国";
  let md = cryptoFramework.createMd(mdAlgName);
  console.info("[Promise]: Md algName is: " + md.algName);
  let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });
  promiseMdUpdate.then(() => {
    // 调用 digest() 以返回结果。
    let PromiseMdDigest = md.digest();
    return PromiseMdDigest;
  }).then(digestOutput => {
    let mdOutput = digestOutput.data;
    //Uint8Array转base64
    let str2 = base64.encodeToStringSync(mdOutput);
    //转16进制
    let str = uint8ArrayToHexStr(mdOutput)
    console.info("[Promise]: MD result: " + mdOutput);
    let mdLen = md.getMdLength();
    console.info("[Promise]: MD len: " + mdLen);
  }).catch((error: BusinessError) => {
    console.error("[Promise]: error: " + error.message);
  });
}

//摘要结果是Uint8Array类型,转换得到十六进制字符串数据
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;
}

更多关于请问有没有HarmonyOS鸿蒙Next中sm3摘要算法的例子?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,SM3摘要算法的使用可以通过@ohos.security.cryptoFramework模块实现。以下是一个简单的示例代码,展示如何使用SM3进行摘要计算:

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

async function sm3Digest(data: string): Promise<string> {
  try {
    const md = cryptoFramework.createMd('SM3');
    await md.update({ data: new Uint8Array(new TextEncoder().encode(data)) });
    const digest = await md.doFinal();
    return Array.prototype.map.call(digest, x => ('00' + x.toString(16)).slice(-2)).join('');
  } catch (error) {
    console.error(`SM3 digest error: ${error.message}`);
    throw error;
  }
}

// 示例调用
sm3Digest('Hello HarmonyOS').then(digest => {
  console.log(`SM3 Digest: ${digest}`);
}).catch(error => {
  console.error(`Error: ${error.message}`);
});

该代码首先创建了一个SM3摘要实例,然后通过update方法传入待计算的数据,最后调用doFinal方法获取摘要结果。摘要结果以十六进制字符串形式返回。

在HarmonyOS鸿蒙Next中,你可以使用ohos.security.crypto模块来实现SM3摘要算法。以下是一个简单的示例代码:

import ohos.security.crypto.Sm3;

public class Sm3Example {
    public static void main(String[] args) {
        String data = "Hello, HarmonyOS!";
        Sm3 sm3 = new Sm3();
        byte[] hash = sm3.digest(data.getBytes());
        System.out.println("SM3 Hash: " + bytesToHex(hash));
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

这个示例展示了如何使用SM3对字符串进行哈希计算,并将结果转换为十六进制字符串输出。

回到顶部