zoukankan      html  css  js  c++  java
  • Base64编码

    这几天遇到一个问题,解码说base64编码不合法,于是大致了解了一下base64编码原则。

    base64编码就是使用64个基本字符来表示编码以后的字符,他们分别是A~Z, a~z,0~9,+ /

    但还有一个特殊字符,等号 “=”,base64 编码是将源字节中的每3个字节编码成为目标字符中的4个字符。如果目标结果不足4个,则以等号 “=”补足。原则上来讲结尾有三个连续等号 “=”也不违反原则,一般有一个或两个,有没有可能有三个,我不想深究。

    C#编码出的base64确实只含有这65个字符,但java不一定,今天接到的它们的结果中包含回车(ascii:13)和回车换行(ascii:8629),替换后就可以正常解码了。

    部分C#代码如下:

    void Main()
    {
        var base64chars = new List<char>();
        for(int i=0;i<26;i++)
            base64chars.Add((char)(((int)'A') + i));
        for (int i = 0; i < 26; i++)
            base64chars.Add((char)(((int)'a') + i));
        for (int i = 0; i < 10; i++)
            base64chars.Add((char)(((int)'0') + i));
        base64chars.Add('+');
        base64chars.Add('/');
    
        var str = File.ReadAllText(@"E:Desktopase64.txt").Replace("
    ",string.Empty).Replace(((char)8629).ToString(),string.Empty);
        foreach (var c in str.TrimEnd('='))
        {
            if(!base64chars.Contains(c))
                System.Diagnostics.Debug.Print("ascii code:" + ((int)c).ToString() + ", display:" + c.ToString());
        }
        
        var bytes = Convert.FromBase64String(str);
        File.WriteAllBytes(@"E:Desktop2.jpg",bytes);
    }
    桂棹兮兰桨,击空明兮溯流光。
  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/nanfei/p/14325052.html
Copyright © 2011-2022 走看看