PDA

View Full Version : Crypto stream بازخوانی فایل رمز گزاری شده



sixeleven
شنبه 21 مهر 1386, 15:07 عصر
چگونه یک فایل ای که خودمون رمز گزاری کردیم را بازیابی کنیم.

فرض کنید من یک فایل رو طبق کد های زیر رمز گزاری کردم



using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace page_210
{
class Program
{
static void Main(string[] args)
{


FileStream shey = new FileStream("acrip.txt", FileMode.CreateNew, FileAccess.Write);
DESCryptoServiceProvider sheydescryp = new DESCryptoServiceProvider();


//sakhtane iv , key
sheydescryp.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
sheydescryp.Key = ASCIIEncoding.ASCII.GetBytes("ZXCVBNMY");

CryptoStream sheycrypy = new CryptoStream(shey, sheydescryp.CreateEncryptor(), CryptoStreamMode.Write);
byte[] x = ASCIIEncoding.ASCII.GetBytes("amir is the best");

sheycrypy.Write(x, 0, x.Length);
sheycrypy.Close();

}
}
}
حالا میخوام مطالب داخل فایل رو decrypt بکنم و داخل کنسول نمایش بدم.





using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace page_210_2
{
class Program
{
static void Main(string[] args)
{
FileStream sheyread=new FileStream(@"adress\acrip.txt",FileMode.Open,FileAccess.Read);

DESCryptoServiceProvider sheydes=new DESCryptoServiceProvider();

sheydes.Key =ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
sheydes.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");

CryptoStream sheyde = new CryptoStream(sheyread, sheydes.CreateDecryptor(), CryptoStreamMode.Read);
int line;
while ((line =sheyde.ReadByte())!=null)
{

Console.WriteLine(line);
}
sheyde.Close();
sheyread.Close();
}
}
}


هم ارور حلقه ی while میده هم مطالب رو صحیح نشون نمیده/
از دوستان ، کسی میتونه راهنمایی کنه؟

RED-C0DE
شنبه 21 مهر 1386, 23:45 عصر
یک مشکلی که هست اینه که توی شرط
while((line =sheyde.ReadByte())!=null)

مقدار برگشتی ReadByte() از نوع int هست و هیچوقت برابر با null نمی شه ، پس حلقه بینهایت است...

sixeleven
یک شنبه 22 مهر 1386, 00:07 صبح
یک مشکلی که هست اینه که توی شرط
while((line =sheyde.ReadByte())!=null)

مقدار برگشتی ReadByte() از نوع int هست و هیچوقت برابر با null نمی شه ، پس حلقه بینهایت است...

آره درسته ، ولی مشکل اینجاست که متد Read() ورودی byte[] میخواد ، که اونم نمیشه . به نظرتون چی باید بنویسم.

حالا جدا از اون تو decrypt هم مشکل داره .

RED-C0DE
یک شنبه 22 مهر 1386, 00:37 صبح
آره درسته ، ولی مشکل اینجاست که متد Read() ورودی byte[] میخواد ، که اونم نمیشه . به نظرتون چی باید بنویسم.
برای این مشکل می تونی خودت یک بافر درست کنی (آرایه ای از نوع byte) که بشه مقصدت و هر چی که از stream می خونه اونجا بریزه، اینجوری می تونی طبق نیازت بخونی ... البته مسلما خودت بهتر می دونی :


byte [] buf=new byte[اندازه بافر];
sheyde.Read(buf , OFSSET , COUNT );


امیدوارم بقیه دوستان راه حل درست رو بگن...

RED-C0DE
یک شنبه 22 مهر 1386, 01:32 صبح
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace page_210
{
class Program
{
static void Main(string[] args)
{
FileStream shey = new FileStream("test.in", FileMode.OpenOrCreate);
DESCryptoServiceProvider TMPsheydescryp = new DESCryptoServiceProvider();
CryptoStream sheycrypy = new CryptoStream(shey, TMPsheydescryp.CreateEncryptor(), CryptoStreamMode.Write);

string x = "hope it helps";

StreamWriter sw = new StreamWriter(sheycrypy);
sw.WriteLine(x);
sw.Close();

//
FileStream sheyread = new FileStream("test.in", FileMode.Open , System.IO.FileAccess.Read );
CryptoStream sheyde= new CryptoStream(sheyread, TMPsheydescryp.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(sheyde);

string sInf;
while ((sInf = sr.ReadLine()) != null)
Console.WriteLine(sInf );

sr.Close();
sheyde.Close();
sheyread.Close();
Console.Read();
}
}
}

sixeleven
یک شنبه 22 مهر 1386, 13:54 عصر
it was usefull,tanx

ولی من هر کاری کردم نتونستم قسمت رمز گزاری و decoder رو از هم جدا کنم.

پس نمی شه decryptor و encryptor رو از هم جدا کرد؟

یعنی مثلا یه برنامه برای رمز گزاری نوشت ، بعد تو یه برنامه جدا برای بازگشت به حالت اول اون نوشت.

ARA
یک شنبه 22 مهر 1386, 16:49 عصر
it was usefull,tanx

ولی من هر کاری کردم نتونستم قسمت رمز گزاری و decoder رو از هم جدا کنم.

پس نمی شه decryptor و encryptor رو از هم جدا کرد؟

یعنی مثلا یه برنامه برای رمز گزاری نوشت ، بعد تو یه برنامه جدا برای بازگشت به حالت اول اون نوشت.

چرا نشه ؟؟
مهم الگوریتم دوتا برنامه است و کلیدتونه:لبخند:

sixeleven
یک شنبه 22 مهر 1386, 17:08 عصر
خوب پیلیز کد decoder برنامه اولی که من تو پست اولم گزاشتم رو ارسال کنید.

RED-C0DE
سه شنبه 24 مهر 1386, 10:27 صبح
همونطور که ARA گفت می شه...توی برنامه زیر از یک DES یا DESCryptoServiceProvider مشترک استفاده شده...




using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace page_210
{
class Program
{
static void Main(string[] args)
{
string fileName = "test.in";
string x = "hope it helps";

DESCryptoServiceProvider sheydescryp = new DESCryptoServiceProvider();
encryp(fileName, x,sheydescryp);
Console.WriteLine(decryp(fileName,sheydescryp ));

Console.Read();
}


static void encryp(string _fileName , string _x,DESCryptoServiceProvider _des)
{
FileStream shey = new FileStream(_fileName , FileMode.OpenOrCreate);
CryptoStream sheycrypy = new CryptoStream(shey, _des.CreateEncryptor(), CryptoStreamMode.Write);

StreamWriter sw = new StreamWriter(sheycrypy);
sw.WriteLine(_x);

sw.Close();
}


static string decryp(string _fileName, DESCryptoServiceProvider _des)
{
FileStream sheyread = new FileStream(_fileName , FileMode.Open, System.IO.FileAccess.Read);
CryptoStream sheyde = new CryptoStream(sheyread, _des.CreateDecryptor(), CryptoStreamMode.Read);

StreamReader sr = new StreamReader(sheyde);

string retVal="";
while ( !sr.EndOfStream && (retVal = sr.ReadLine()) != null) ;

sr.Close();
sheyde.Close();
sheyread.Close();

return retVal;
}
}
}