2016-12-28 172 views
-1

我有这样的:Base64编码为base64,

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

上面的代码工作完美,但我有一个问题。编程的方式是否可以将编码的字符串再次编码成2个编码的字符串?

但是,如果你试图解密它们,它会导致相同和普通的文本。如果是,那么请提供代码并指导他们。如果否,请解释。最后,如果我使用base64多次解码(比方说100),是否有可能?尺寸会增加吗?我不是这样做的一个主要方式来加密的东西(只是为了让人们知道)。

+1

您可以根据需要对结果进行多次Base64编码,但您必须解码结果sa我的次数。 –

+1

Base64与加密无关。这是一种字符编码,可将输出字符串中的字符限制为可打印字符。它通常用于对二进制数据进行编码,以便可以通过仅字符传输协议进行发送。 – Kevin

+0

加密需要(秘密)密钥,解码不需要。如果您没有在某处输入密钥,则不会进行加密。你只需要编码数据一次,因为它用于从一种格式(字节)到另一种(文本字符串)。维基百科清楚地描述了基地64的工作原理,包括规模的增加。 -1没有查找基本信息或尝试自己。 –

回答

0

你已经做的一切,你需要这个尝试自己:

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-多长时间一次将字符串编码为,它永远都不会是一个体面的加密机制。例如,如果你改变开头的原始字符串,东西将在开头的的Base64编码值中改变,无论你重复了多少次。

foobar编码多达4次:

 
Zm9vYmFy 
Wm05dlltRnk= 
V20wNWRsbHRSbms9 
VjIwd05XUnNiSFJTYm1zOQ== 

doobar编码多达4次:

 
ZG9vYmFy 
Wkc5dlltRnk= 
V2tjNWRsbHRSbms9 
VjJ0ak5XUnNiSFJTYm1zOQ== 

而等于字符经常出现在所述经编码的结束时(===)字符串是您使用Base64的快速赠品。

+1

...和相当有限的字母表(使用的字符集)将是一个快速赠品,否则。 –

0

如果你想为base64编码字符串多次,你可以使用像这样的代码:

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

//只创建这些功能:

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);