47

私は。。をしようとしています:

  1. バイト配列を生成します。
  2. そのバイト配列をbase64に変換します
  3. そのbase64文字列をバイト配列に変換し直します。

私はいくつかの解決策を試しました。たとえば、この質問の解決策です。

何らかの理由で、最初と最後のバイト配列が一致しません。使用されるコードは次のとおりです。

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    {
         byte[] originalArray = new byte[32];
         rng.GetBytes(key);
         string temp_inBase64 = Convert.ToBase64String(originalArray);
         byte[] temp_backToBytes = Encoding.UTF8.GetBytes(temp_inBase64);
    }

私の質問は次のとおりです。

  1. 「originalArray」と「temp_backToBytes」が一致しないのはなぜですか?(originalArrayの長さは32、temp_backToBytesの長さは44ですが、値も異なります)

  2. 前後に変換することは可能ですか?もしそうなら、どうすればこれを達成できますか?

4

1 に答える 1

60

エンコードされた配列が約4分の1長くなる理由は、base-64エンコードではすべてのバイトのうち6ビットしか使用されないためです。それが存在の理由です。電子メールなどのASCIIのみのチャネルを介した交換に適した方法で、ゼロやその他の印刷不可能な文字を含む任意のデータをエンコードするためです。

元の配列を元に戻す方法は、次を使用することConvert.FromBase64Stringです。

 byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);
于 2012-07-24T15:34:47.770 に答える