如何在C#(3.5框架)中编码和解码Base128字符串

Pra*_*mar 1 .net c# base64 c#-4.0

我正在研究安全相关的项目,在那个项目中我目前将数据转换为base64格式.但转换后的base64数据的大小更多,为此我想将数据转换为base128格式.如何在base128字符串中编码和解码数据c#中的格式?

Mat*_*son 6

如果可以避免,我强烈建议不要使用Base128编码.7位字母表必须包含不可打印的ASCII控制字符(在代码点0x20下方只有94个可打印字符).如果您尝试向他们提供此类数据,许多系统都将失败.真的似乎不值得为额外的位获得少量的空间节省.像ASCII85Base91这样的东西可以满足您的需求而不会头疼.在类似的问题上看到这篇SO帖子.

但是,如果您是持久性的,那么您应该能够修改以下的映射字符串以获得所需的内容.(注意:您必须使用正确的不可打印代码来添加要添加到"\ x09"的映射中的字符):

public static string GetStringFromByteArray(byte[] data)
        {
            string mapping = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvqwxyz!#$%&()*+-;<=>?@^_`{|}~',./:[]\\\"";

            BigInteger base10 = new BigInteger(data);
            string baseX;
          int base=mapping.Length;
            var result = new Stack<char>();

            do
            {
                result.Push(mapping[(int)(base10 % base)]);
                base10 /= base;

            } while (base10 != 0);

            baseX = new string(result.ToArray());

            return baseX;
        }
Run Code Online (Sandbox Code Playgroud)