2011-12-27 35 views
13

Ok vậy tôi có một chuỗi văn bản, được mã hóa trong Base 64 như sau:Cách giải mã chuỗi văn bản từ một Base64 thành mảng byte và lấy thuộc tính chuỗi của mảng byte này mà không bị hỏng dữ liệu

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

sau đó tôi chuyển đổi chuỗi của tôi từ cơ sở 64 để một mảng byte như vậy:

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

tại thời điểm này, tôi muốn để có được chuỗi giá trị của mảng byte này và tiết kiệm này trong một file văn bản không mất dữ liệu hoặc tham nhũng. Mã bên dưới dường như không hoạt động:

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

Ai đó có thể vui lòng cho tôi biết tôi đang đi đâu sai.

Chỉnh sửa: Đầu ra không thể đọc được, tôi cần lấy chuỗi đã giải mã và sau đó sử dụng OpenSSL để giải mã nó. Đầu ra và kết quả từ OpenSSL đều dưới đây:

Output

OpenSSL

+0

bạn có thể cho biết thêm thông tin về những gì đang xảy ra vậy? bạn có nhận được ngoại lệ không? hoặc là đầu ra không đọc được? –

+0

Vì vậy, chuỗi base-64 là một mảng byte được mã hóa của một chuỗi khác? Chuỗi đã được chuyển đổi thành một byte [] bằng ASCII chưa? – vcsjones

+0

Có thể bạn sử dụng mã hóa sai? Bạn có thể cho thấy những gì bạn nhận được và những gì bạn mong đợi? – Jan

Trả lời

3

Nếu chuỗi được mã hóa sau đó các nội dung sẽ trông giống như những gì bạn có trong tập tin văn bản của bạn. Nhưng để đảm bảo rằng tệp không bị hỏng, bạn nên ghi nội dung tệp dưới dạng nhị phân thay vì sử dụng bộ mã hóa văn bản. Hãy xem 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); 
    } 
Các vấn đề liên quan