2011-12-27 14 views
13

Okだから、以下のようなBase64でエンコードされた文字列があります。テキストの文字列をBase64からバイト配列にデコードし、データの破損なしでこのバイト配列の文字列プロパティを取得する方法

string myText = "abcBASE64TEXTGOESHEREdef=="; // actual string is 381 characters long with trailing '==' 

私はそのようにのようなバイト配列にベース64から私の文字列を変換:

byte[] decodedFromBase64 = Convert.FromBase64String(myText); 

この時点で、私はこのバイト配列の文字列値を取得しなくてテキストファイルでこれを保存したいですデータ損失または破損。以下のコードはそれをしていないようです:

string myDecodedText = Encoding.ASCII.GetString(decodedFromBase64); 
StreamWriter myStreamWriter = new StreamWriter("C:\\OpenSSL-Win32\\bin\\textToDecrypt.txt"); 
myStreamWriter.Write(myString); 
myStreamWriter.Flush(); 
myStreamWriter.Close(); 

誰かが間違っていると私に教えてください。

編集:出力を読み取ることができません。デコードされた文字列を受け取り、OpenSSLを使用して解読する必要があります。 OpenSSLのからの出力結果は両方とも以下の通りです:

Output

OpenSSL

+0

あなたは間違って起こっているかについての詳細な情報を与えることができますか?あなたは例外を受け取りますか?または出力が判読不能ですか? –

+0

ベース64文字列は別の文字列のエンコードされたバイト配列ですか?文字列はもともとASCIIを使用してバイト[]に変換されていましたか? – vcsjones

+0

間違ったエンコーディングを使用している可能性がありますか?あなたが得るものと期待するものを見せることができますか? – Jan

答えて

3

文字列がエンコードされている場合、その内容は非常にあなたがテキストファイルで持っているもののようになります。しかし、ファイルが壊れていないことを確認するには、テキストエンコーダーを使用する代わりに、バイナリーとしてファイルの内容を書き込む必要があります。 File.WriteAllBytes()をチェックしてください。

13
public static string base64Decode(string data) 
{ 
    byte[] toDecodeByte = Convert.FromBase64String(data); 

    System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding(); 
    System.Text.Decoder utf8Decode = encoder.GetDecoder(); 

    int charCount = utf8Decode.GetCharCount(toDecodeByte, 0, toDecodeByte.Length); 

    char[] decodedChar = new char[charCount]; 
    utf8Decode.GetChars(toDecodeByte, 0, toDecodeByte.Length, decodedChar, 0); 
    string result = new String(decodedChar); 
    return result; 
} 
1
static void Main(string[] args) 
    { 
     string completeUrl = SERVICE_URL; 
     WebRequest request = WebRequest.Create(completeUrl); 
     request.Credentials = CredentialCache.DefaultCredentials; 
     WebProxy proxyObject = new WebProxy(SERVICE_URL, true); 
     request.Proxy = proxyObject; 
     HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse(); 
     byte[] data; 
     const int BUFFER_SIZE = 2048; 
     int bytesRead; 
     byte[] buffer = new byte[BUFFER_SIZE]; 
     using (MemoryStream mss = new MemoryStream()) 
     { 
      using (BinaryReader readers = new 
      BinaryReader(webResponse.GetResponseStream(), System.Text.Encoding.UTF8)) 
      { 
       while ((bytesRead = readers.Read(buffer, 0, BUFFER_SIZE)) > 0) 
       { 
        mss.Write(buffer, 0, bytesRead); 
       } 
       data = mss.ToArray(); 
       System.Text.Encoding enc = System.Text.Encoding.GetEncoding("iso-8859-1"); 
       string str = enc.GetString(data); 
       XmlDocument xdoc = new XmlDocument(); 
       xdoc.LoadXml(str); 
       XmlNode xmlList = xdoc.ChildNodes[1]; 
       XmlNode item = xmlList.ChildNodes[1]; //this is your data : JVBERi0xLjUNCiXNzc3NDQoxIDAgb2JqDQo8PA0KL0NyZWF0b3IgKERvY3VtZW50UHJ 
       Base64Decode(item.InnerText.ToString()); 
       Console.WirteLine("File successfully saved"); 
       Console.ReadLine(); 
      } 
     } 
    } 

    public static void Base64Decode(string base64EncodedData) 
    { 
     var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
     File.WriteAllBytes("pdf.pdf", base64EncodedBytes); 
    } 
関連する問題