【问题标题】:Base64 Into Base64Base64转Base64
【发布时间】:2016-12-28 13:34:16
【问题描述】:

我有这个:

byte[] data = Encoding.ASCII.GetBytes("foobar");
var base64_text = Convert.ToBase64String(data);
Console.WriteLine(base64_text);

上面的代码完美运行,但我有一个问题。是否可以通过编程将编码字符串再次编码为 2x 编码字符串?

但是,如果您尝试解密它们,则会产生相同且正常的文本。如果是,请提供代码并指导他们。如果否,请解释。最后,如果我使用base64多次解码(比如说100),是否有可能?尺寸会增加吗?我不是将其作为加密内容的主要方式(只是为了让人们知道)。

【问题讨论】:

  • 您可以根据需要多次对结果进行 Base64 编码,但您必须对结果进行相同次数的解码。
  • Base64 与加密无关。它是一种字符编码,将输出字符串中的字符限制为可打印字符。它通常用于对二进制数据进行编码,以便可以通过仅字符传输协议发送。
  • 加密需要(秘密)密钥,解码不需要。如果您没有在某处输入密钥,则没有加密。您只需要对数据进行一次编码,因为它用于从一种格式(字节)转换为另一种格式(文本字符串)。 Wikipedia 上清楚地描述了 base 64 的工作原理,包括大小的增加。 -1 表示不查找基本信息或不尝试自己。

标签: c# encryption cryptography base64


【解决方案1】:

您已经在做所有需要自己尝试的事情:

byte[] data = Encoding.ASCII.GetBytes("foobar");
var base64_text = Convert.ToBase64String(data);
Console.WriteLine(base64_text);

data = Encoding.ASCII.GetBytes(base64_text);
base64_text = Convert.ToBase64String(data);
Console.WriteLine(base64_text);

您会看到每次执行编码时数据都会发生变化和增长,您可以想象您需要执行相同次数的解码操作才能取回原始字符串。

如前所述,无论您对字符串进行 Base64编码 的频率如何,它都不会是一个像样的加密机制。例如,如果您更改原始字符串的 beginning 中的某些内容,则 Base64 编码值的 beginning 中的某些内容将发生更改,无论您重复了多少次它。

foobar 最多编码 4 次:

Zm9vYmFy Wm05dlltRnk= V20wNWRsbHRSbms9 VjIwd05XUnNiSFJTYm1zOQ==

doobar 最多编码 4 次:

ZG9vYmFy Wkc5dlltRnk= V2tjNWRsbHRSbms9 VjJ0ak5XUnNiSFJTYm1zOQ==

通常出现在编码字符串末尾的等号字符(===)是您使用 Base64 的快速赠品。

【讨论】:

  • ... 否则,相当受限的字母表(使用的字符集)将是一个快速的赠品。
【解决方案2】:

如果你想对一个字符串进行多次base64编码,你可以使用如下代码:

string text = "foobar";
for (int i = 0; i < 10; i++)
{
    text = Convert.ToBase64String(Encoding.ASCII.GetBytes(text));       
    Console.WriteLine(text);
}

【讨论】:

    【解决方案3】:

    //只需创建这些函数:

     public string  Encode (string EncodingText,int NumberOfTimesYouWantToEncode)
        {
            byte[] data;
            string base64_text = EncodingText;
            for (int i = 0; i < NumberOfTimesYouWantToEncode; i++)
            {
                data = Encoding.ASCII.GetBytes(base64_text);
                base64_text = Convert.ToBase64String(data);
    
            }
            return base64_text;
        }
    
    
        public string Decode(string EncodingText, int NumberOfTimesYouNeedToDecode)
        {
            byte[] data;
            string decodedString = EncodingText;
            for (int i = 0; i < NumberOfTimesYouNeedToDecode; i++)
            {
                data = Convert.FromBase64String(decodedString);
                decodedString = Encoding.ASCII.GetString(data);
            }
            return decodedString;
        }
    

    //并调用这些函数如下:

     string EncodedString= Encode ("foobar", 3);
     string DecodedString=Decode(EncodedString,3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 2023-02-24
      • 2013-07-16
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      相关资源
      最近更新 更多