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

如何实现字节数组转十六进制字符串及逆向还原为Base64?

逆向Base64转格式化指纹字符串的流程及问题修复

正向流程拆解

原代码是将Base64字符串先转字节数组,再转带连字符的十六进制字符串,最后通过FormatFingerOp处理为带空格分隔的格式化指纹:

var val = FormatFingerOp(BitConverter.ToString(Convert.FromBase64String("EcE4Zodu3wRTBXntCdUvifj+/GggA3DnG6zEKRZGpcY=")));

FormatFingerOp的具体逻辑:把带连字符的十六进制字符串(如A1-B2-C3-D4)拆分为单个十六进制对,拼接后每2个对(4个字符)加一个空格,最终输出格式类似A1B2 C3D4:

var fp = "";
string[] keys = val.Split('-');
for (int i = 1; i <= keys.Length; i++)
{
    fp += keys[i - 1];
    if (i % 2 == 0)
        fp += " ";
}

现有逆向代码的问题

你写的逆向代码有两个关键错误:

  • 没有先移除格式化指纹中的空格,直接遍历字符添加连字符,会把空格混入十六进制字符串,导致后续字节转换失败。
  • 变量引用混乱:比如用了val变量,但逆向流程中val应该是处理后的无连字符十六进制字符串,而非原指纹。

正确的逆向实现

逆向需要从格式化指纹(如A1B2 C3D4)还原回原始Base64字符串,分三步完成:

步骤1:还原为带连字符的十六进制字符串

先去掉所有空格,再每2个字符插入一个连字符,得到和BitConverter.ToString输出一致的格式:

// fp为格式化后的指纹字符串
string cleanedFp = fp.Replace(" ", ""); // 移除所有空格,得到连续十六进制字符
string hexWithDashes = "";
for (int i = 0; i < cleanedFp.Length; i += 2)
{
    if (i > 0)
        hexWithDashes += "-";
    hexWithDashes += cleanedFp.Substring(i, 2);
}

步骤2:转换为字节数组

拆分带连字符的十六进制字符串,逐个转换为字节:

string[] hexPairs = hexWithDashes.Split('-');
byte[] byteArray = new byte[hexPairs.Length];
for (int i = 0; i < hexPairs.Length; i++)
{
    byteArray[i] = Convert.ToByte(hexPairs[i], 16);
}

步骤3:还原为Base64字符串

最后将字节数组转回Base64:

string originalBase64 = Convert.ToBase64String(byteArray);
// 最终输出应为原始的"EcE4Zodu3wRTBXntCdUvifj+/GggA3DnG6zEKRZGpcY="

字节数组与十六进制字符串的转换说明

字节数组转十六进制字符串

  • 系统自带方法:BitConverter.ToString(byteArray),输出带连字符的格式(如A1-B2-C3)。
  • 自定义无连字符格式:遍历每个字节,用ToString("X2")(大写)或"x2"(小写)拼接:
string hexString = string.Concat(byteArray.Select(b => b.ToString("X2")));

十六进制字符串转字节数组

  • 带连字符格式:先拆分Split('-'),再逐个转换为字节:
string[] hexPairs = hexWithDashes.Split('-');
byte[] bytes = hexPairs.Select(p => Convert.ToByte(p, 16)).ToArray();
  • 无连字符格式:每2个字符为一组转换,注意字符串长度必须是偶数:
byte[] bytes = new byte[hexString.Length / 2];
for (int i = 0; i < hexString.Length; i += 2)
{
    bytes[i/2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}

内容的提问来源于stack exchange,提问作者Zeynep Aydemir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:40:47