web-dev-qa-db-ja.com

バイト配列からbase64への変換およびその逆

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

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

例えば question のようないくつかのソリューションを試しました。

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

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. 前後に変換することは可能ですか?その場合、どうすればこれを達成できますか?

34
crawfish

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

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

 byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);
43
dasblinkenlight