Производится шифрование текста в изображение (цифровая стеганография, метод LSB).
Но при расшифровке текста из изображения (именно кириллицы), мне выводит набор разных невнятных символов и цифр.
Но при этом у меня так же есть идентичное приложение, но текст изначально шифруется криптографическим методом, а потом его результат вшивается в изображение. В таком случае все прекрасно работает. А при обычном шифровании нет. Что за проблема? Тогда использовал Encoding.Default и все работало, в этом случае не работает ни Default, ни UTF-8... Ниже представлен код, как я шифрую текст в изображение.
[HttpPost]
public ActionResult EncryptedOnly(HttpPostedFileBase upload1, HttpPostedFileBase upload2)
{
var baseLocation = Server.MapPath("~/Files/");
var fileName1 = GetUniqueFileName(upload1.FileName);
var fileLocation1 = Path.Combine(baseLocation, fileName1);
upload1.SaveAs(fileLocation1);
var fileName2 = GetUniqueFileName(upload2.FileName);
var fileLocation2 = Path.Combine(baseLocation, fileName2);
upload2.SaveAs(fileLocation2);
Image image = Image.FromStream(upload2.InputStream);
image.Save(fileLocation2);
string imagePath = fileLocation2;
Bitmap bmp = new Bitmap(imagePath);
StreamReader sr = new StreamReader(fileLocation1, Encoding.Default);
string text = sr.ReadToEnd();
Bitmap bmp1 = SteganoHelper.embedText(text, bmp);
arr = bmp1.ToByteArray(ImageFormat.Png);
MemoryStream ms = new MemoryStream(arr);
Image imageResult = Image.FromStream(ms);
var fileNameRes = "res.png";
var fileLocationRes = Path.Combine(baseLocation, fileNameRes);
imageResult.Save(fileLocationRes);
TempData["ImageLocationOnly"] = fileNameRes;
return RedirectToAction("PreviewOnly");
}
А так же расшифровка:
[HttpPost]
public ActionResult DecryptedOnly(HttpPostedFileBase upload)
{
string extractedText;
string fileName = GetUniqueFileName(upload.FileName);
Image image = Image.FromStream(upload.InputStream);
image.Save(Server.MapPath("~/Files/" + fileName));
string imagePath = Server.MapPath("~/Files/" + fileName);
Bitmap bmp = new Bitmap(imagePath);
var baseLocation = Server.MapPath("~/Text/");
var fileNameRes = GetUniqueFileName("res.txt");
var fileLocationRes = Path.Combine(baseLocation, fileNameRes);
try
{
extractedText = SteganoHelper.extractText(bmp);
System.IO.File.AppendAllText(fileLocationRes, extractedText, Encoding.Default);
TempData["FileLocationOnly"] = fileLocationRes;
return RedirectToAction("PreviewDecryptOnly");
}
catch
{
extractedText = "Wrong password";
System.IO.File.AppendAllText(fileLocationRes, extractedText, Encoding.Default);
TempData["FileLocationOnly"] = fileLocationRes;
return RedirectToAction("PreviewDecryptOnly");
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости