You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native中生成与C#一致的MD5哈希字符串?

问题根源与解决方案

你的问题出在C#函数对MD5哈希结果的拼接逻辑上,而非字节数组转换或MD5计算本身:

C#函数的特殊处理

C#的GetMD5HashData并没有生成标准的十六进制MD5字符串,而是将MD5计算得到的每个字节直接转为十进制数值字符串后拼接。比如:

  • 假设MD5哈希后的某字节是0xCF(十进制207),函数会拼接字符串"207",而非标准十六进制的"CF"或"cf"。

以输入system123为例:
MD5计算后的字节数组是[207, 154, 234, 29, 255, 75, 190, 225, 85, 191, 70, 139, 105, 225, 216, 8],将每个字节转成十进制字符串拼接后,就得到你看到的207154234292557519022585191701391052252168。

React Native 实现方案

你需要先正确计算MD5哈希的字节数组,再将每个字节转为十进制字符串拼接,而非直接使用标准十六进制结果。以下是可行的实现:

方案1:使用crypto-js

import CryptoJS from 'crypto-js';

function getMD5HashData(data) {
    // 计算MD5哈希(WordArray格式)
    const md5Hash = CryptoJS.MD5(data);
    // 将WordArray转为字节数组
    const hashBytes = [];
    for (let i = 0; i < md5Hash.sigBytes; i++) {
        const byte = md5Hash.words[i >>> 2] >>> (24 - (i % 4) * 8) & 0xff;
        hashBytes.push(byte);
    }
    // 将每个字节转为十进制字符串并拼接
    return hashBytes.map(byte => byte.toString()).join('');
}

// 测试输入'system123'
console.log(getMD5HashData('system123')); // 输出207154234292557519022585191701391052252168

方案2:使用react-native-crypto(更贴近原生)

如果你使用react-native-crypto获取原生MD5计算结果:

import crypto from 'react-native-crypto';

function getMD5HashData(data) {
    const hash = crypto.createHash('md5');
    hash.update(data);
    // 获取哈希的Buffer,转为字节数组
    const hashBuffer = hash.digest();
    const hashBytes = Array.from(hashBuffer);
    // 拼接十进制字符串
    return hashBytes.map(byte => byte.toString()).join('');
}

额外说明

你当前的convertStringToByteArray函数需要注意:Encoding.Default在Windows下是ANSI编码,而charCodeAt获取的是UTF-16编码的码点。如果你的测试环境中两者一致(比如输入都是ASCII字符)没问题,但如果有非ASCII字符,需要确保编码一致,可使用iconv-lite等库转换为对应编码的字节数组后再计算MD5。

内容的提问来源于stack exchange,提问作者Tiago Martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:33:30