【问题标题】:How do I know file type encrypted in base64 string我如何知道以 base64 字符串加密的文件类型
【发布时间】:2021-05-21 17:56:14
【问题描述】:

我有一个base64解码器的任务。如您所知,base64 不包含任何有关源文件名的信息,但前 5 个符号确实包含有关文件类型的信息。我已经有一个从 base64 字符串返回类型的函数。在这里。

    string GetFileTypeByBase64(string base64)
    {
        var data = base64.Substring(0, 5);
        switch (data.ToUpper())
        {
            case "IVBOR":
                return ".png";
            case "/9J/4":
                return ".jpg";
            case "AAAAI":
                return ".mp4";
            case "JVBER":
                return ".pdf";
            case "AAABA":
                return ".ico";
            case "UMFYI":
                return ".rar";
            case "E1XYD":
                return ".rtf";
            case "U1PKC":
                return ".txt";
            case "MQOWM":
            case "77U/M":
                return ".srt";
            default:
                return "." + data;
        }
    }

这是我的问题:我如何知道 base64 字符串中的文件是 mp3 还是 wav? (如果您提供其他文件类型的标志也将不胜感激)

【问题讨论】:

  • 但前 5 个符号确实包含有关文件类型的信息 - 这只是对了一半。实际上,base64 确实只包含原始文件的编码字节,并且没有自己的 header。许多文件格式都有一个文件头,通常以某个字节序列开头,因此 base64 编码的字符串也以某个序列开头。例如。每个 base64 编码的 png 都以“iVBOR”开头。另请参阅my answer here
  • 当你理解了这一点后,你就可以很容易地找到每个带有固定标题的文件类型。要么在 google 上快速搜索一下文件格式,要么只编码几个相同类型的文件,看看结果是否总是以相同的字符开头。

标签: c# base64 decode decoder


【解决方案1】:

关于您的 switch 语句,WAV 文件的字符串是“UklGR”,MP3 文件的字符串是“SUQzB”。

这些字符串是文件本身的字节,所以这个字符串本质上是文件头的第一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多