HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?

HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?

当前app中用接口安全校验用了md5加密方式,但是加密结果和直接调用crypto-js中MD5的加密结果不一致,不知道当前app中MD5的加密效果用在鸿蒙中怎么实现,现在附上iOS、安卓版本MD5方法实现,帮忙提供下在鸿蒙中应该如何实现相同的加密效果,当前鸿蒙Md5的加密方法也提供在附件中,比如对字符串 “299ca90913f94fa598782952db1479682024-07-19 151721375617791937300crm.BITauto>COM” 的加密结果,当前iOS、安卓中得到的加密结果是 “10cdd15d6255ae1b2e5362e148ba194c”


更多关于HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

请提供iOS 安卓的加密方式,是16进制还是base64格式,还是其它

// 可参考以下代码:
function doMdByPromise() {
    // 摘要算法名称。
    let mdAlgName = 'MD5';
    // 要进行摘要的数据。
    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;
        let str2 = 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 = '';
    for (let i = 0; i < data.length; i++) {
        let char = ('00' + data[i].toString(16)).slice(-2);
        hexString += char;
    }
    return hexString;
}

function stringToUint8Array(str: string) {
    let arr = new Uint8Array(str.length);
    for (let i = 0, j = str.length; i < j; ++i) {
        arr[i] = str.charCodeAt(i);
    }
    return arr;
}

// 参考下面:传入 into 即可
function mdBySync(into: string): string {
    let md = cryptoFramework.createMd('MD5');
    md.updateSync({ data: new Uint8Array(buffer.from(into, 'utf-8').buffer) });
    
    let mdOutput = md.digestSync();
    let str2 = uint8ArrayToHexStr(mdOutput.data);
    
    console.info('[Sync]: MD result: ' + mdOutput.data);
    console.info('[Sync]: MD len: ' + md.getMdLength());
    
    return str2;
}

更多关于HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ios 或者Android 应该不止MD5加密吧. 直接加密不会是"10cdd15d6255ae1b2e5362e148ba194c",

此外加密字符串, 最好用代码的格式增加以下, 否则可能有空格啥的, 影响结果.

ps: 没见附件内容.

这个与鸿蒙系统没啥关系, 如果使用了crypto-js 则加密主要由 crypto-js库负责实现.


猜测大概率拼接加密字符串的顺序, 或者内容不对. 如果对的话md5 应该是一样的. 可以通过 在线的工具网站 如https://www.toolhelper.cn/DigestAlgorithm/MD5 来和本地解密结果对比。

在HarmonyOS鸿蒙Next中实现与iOS、安卓版本相同的MD5加密效果,可以使用鸿蒙提供的cryptoFramework模块。该模块提供了多种加密算法,包括MD5。以下是一个简单的示例代码,展示如何在鸿蒙Next中使用MD5进行加密:

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

async function md5Encrypt(input: string): Promise<string> {
  // 创建MD5实例
  let md5 = cryptoFramework.createMd();

  // 初始化
  await md5.init();

  // 输入数据
  let inputArray = new Uint8Array(new TextEncoder().encode(input));
  await md5.update(inputArray);

  // 获取加密结果
  let md5Output = await md5.doFinal();
  let result = Array.from(md5Output).map(b => b.toString(16).padStart(2, '0')).join('');

  return result;
}

// 使用示例
md5Encrypt('Hello, HarmonyOS').then(result => {
  console.log('MD5加密结果:', result);
});

上述代码中,cryptoFramework.createMd()用于创建MD5实例,init()进行初始化,update()输入待加密的数据,doFinal()获取加密结果。最后将结果转换为十六进制字符串输出。

通过这种方式,你可以在鸿蒙Next中实现与iOS、安卓相同的MD5加密效果。

在HarmonyOS鸿蒙Next中实现与iOS、安卓相同的MD5加密效果,可以使用Java标准库中的MessageDigest类。以下是示例代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                hexString.append(String.format("%02x", b));
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

这段代码在HarmonyOS中生成与iOS、安卓相同的MD5哈希值。

回到顶部