Как декодировать строку текста из Base64 в массив байтов и получить свойство строки этого массива байтов без искажения данных
Итак, у меня есть строка текста, закодированная в Base 64, как показано ниже:
string myText = "abcBASE64TEXTGOESHEREdef=="; // actual string is 381 characters long with trailing '=='
Затем я конвертирую свою строку из Base 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]()
Ответы
Ответ 1
Если строка закодирована, содержимое будет похоже на то, что у вас есть в текстовом файле. Но чтобы убедиться, что файл не поврежден, вы должны записать содержимое файла в виде двоичного кода вместо использования текстового кодировщика. Проверьте File.WriteAllBytes().
Ответ 2
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;
}
Ответ 3
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);
}