HarmonyOS 鸿蒙Next中如何同步md5加密,提供一个案例

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

HarmonyOS 鸿蒙Next中如何同步md5加密,提供一个案例

鸿蒙中如何同步md5加密,提供一个案例

2 回复

"可使用ohpm的三方库""[@ohos](/user/ohos)/crypto-js""进行加密操作,具体可参考:https://ohpm.openharmony.cn/#/cn/detail/[@ohos](/user/ohos)%2Fcrypto-js

MD5加密可参考以下代码来写:

let base64 = new util.Base64Helper();
export function DoMdByPromise() {
    // 摘要算法名称。
    let mdAlgName = ""MD5"";
    // 要进行摘要的数据。
    let message = ""Hello, 中国"";
    let md = cryptoFramework.createMd(mdAlgName);
    ;
    // 如果数据量较小,可以使用 update() 一次传入所有数据。输入参数的长度没有限制。
    let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });
    promiseMdUpdate.then(() => {
        let PromiseMdDigest = md.digest();
        return PromiseMdDigest;
    }).then(digestOutput => {
        let mdOutput = digestOutput.data;
        let str2 = uint8ArrayToHexStr(mdOutput);
        let str = base64.encodeToStringSync(mdOutput);
        let str1 = uint8ArrayToString(mdOutput);
        let mdLen = md.getMdLength();
    }).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;
}
// 字节流转成可理解的字符串
function uint8ArrayToString(array: Uint8Array) {
    // 将UTF-8编码转换成Unicode编码
    let out: string = """";
    let index: number = 0;
    let len: number = array.length;
    while (index < len) {
        let character = array[index++];
        switch (character >> 4) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
                out += String.fromCharCode(character);
                break;
            case 12:
            case 13:
                out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
                break;
            case 14:
                out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
                break;
            default:
                break;
        }
    }
    return out;
}
function stringToUint8Array(str: string) {
    return new Uint8Array(buffer.from(str, 'utf-8').buffer)
} "
 

在HarmonyOS鸿蒙Next中实现MD5加密的同步操作,可以通过以下案例进行说明:

HarmonyOS的MD5加密API通常设计为异步方法,但出于某些场景的需要,可通过编写封装函数将其转换为同步执行。然而,直接调用同步MD5加密API的情况较为少见,更多时候开发者会选择使用第三方库来实现同步加密。

例如,可以使用crypto-js库。首先,在项目的oh-package.json5文件中添加对crypto-js库的依赖,指定版本为^2.0.4-rc.1。然后,在代码中导入crypto-js库,并使用其提供的MD5加密方法。以下是一个简单的示例:

import { CryptoJS } from '@ohos/crypto-js';

@Entry
@Component
struct Page {
    build() {
        Column() {
            Button('获取MD5').onClick(() => {
                let abc = CryptoJS.MD5("123456").toString();
                console.info(`abc: ${abc}`);
            })
        }.height('100%').width('100%')
    }
}

上述代码在点击按钮时,会计算字符串"123456"的MD5值,并打印到控制台。

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

回到顶部