请问有没有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对字符串进行哈希计算,并将结果转换为十六进制字符串输出。

