PDA

View Full Version : ذخیره اطلاعات مهم در فایل



AliRezaBeytari
جمعه 18 اردیبهشت 1394, 08:27 صبح
سلام دوستان.
من در برنامه ای که دارم مینویسم ، باید یه سری اطلاعات بسیار مهم که اصلا نباید لو برو رو درون یه فایل با فرمت اختصاصی خودم ذخیره کنم.
مشکل من اینه که میخوام مثل فایل های DLL که وقتی با Notepad بازشون میکنی ، یه سری کارکترهای نامفهوم نمایش داده میشه ؛ اطلاعات رو ذخیره کنم.
منظورم اینه که نمیخوام به صورت Text باشه که Encode کرده باشه. میخوام مثل فایل های باینری اصلا قابل دیده نباشه.

خیلی ممنونم.

chikar
جمعه 18 اردیبهشت 1394, 11:02 صبح
من در برنامه ای که دارم مینویسم ،..


سلام می تونید اطلاعاتتون رو به روش hex یا base64 کد گذاری کنید مثلا

QTextEdit *tedit = new QTextEdit(this);
QString file_neme = "c:/ali.txt";

QFile *myfile = new QFile(file_neme);
myfile->open(QIODevice::ReadWrite);
QByteArray c = myfile->readAll();
QString encoded = QString(c.toBase64());//c.toHex();
tedit->setText(QString(encoded));

برای خوندن هم می تونی این جوری بنویسی
c.fromBase64(),c.fromHex()

AliRezaBeytari
جمعه 18 اردیبهشت 1394, 15:56 عصر
سلام می تونید اطلاعاتتون رو به روش hex یا base64 کد گذاری کنید مثلا

QTextEdit *tedit = new QTextEdit(this);
QString file_neme = "c:/ali.txt";

QFile *myfile = new QFile(file_neme);
myfile->open(QIODevice::ReadWrite);
QByteArray c = myfile->readAll();
QString encoded = QString(c.toBase64());//c.toHex();
tedit->setText(QString(encoded));

برای خوندن هم می تونی این جوری بنویسی
c.fromBase64(),c.fromHex()




دوست عزیز ، من گفتم نمیخوام کاربر بتونه حتی متن Encode شده رو هم ببینه.
مثل میخوام وقتی کاربر اون فایلی که من ذخیره کردم رو با نرم افزار ویرایشگر متنی مثل ++Notepad باز کرد ، اینطوری نمایش داده بشه :

http://p30up.ir/images/qu2uj5nc8jimhlq16x0w.png

ممنونم.

returnx
جمعه 18 اردیبهشت 1394, 22:48 عصر
به طور مثال ، شما میتونید به شکل زیر عمل کنید :
#include <QCoreApplication>
#include <QFile>
#include <iostream>
#include <QDataStream>

using namespace std;
struct test_t
{
int index;
QString data;
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);


QFile i_file("D:/saalaam.txt");
i_file.open(QIODevice::ReadWrite);

test_t t;
QDataStream i_stream(&i_file);
//Read Data:

if (i_file.isOpen())
{

if (i_file.exists())
{
while (!i_stream.atEnd())
{

i_stream>>t.index>>t.data;
cout<<t.index<<" "<<t.data.toStdString()<<"\n";
//i_file.seek(sizeof(t));

}

}

for (int counter = 0; counter < 4; ++counter)
{
t.index=counter;
t.data=QString("x").repeated(counter);
i_stream<<t.index<<t.data;
}

}

i_file.close();
return a.exec();
}

negative60
شنبه 19 اردیبهشت 1394, 00:51 صبح
base64 الگوريتم مناسبی برای رمزنگاری نيست و به سادگی قابل بازگشت هست بهتره برای ذخيره اطلاعات برنامتون از ديتابيس Sqlite استفاده کنيد و برای ديتابيس پسورد مشخص کنيد اگر قرار هست پسورد رو در خود فايل برنامه ذخيره کنيد پسورد رو به وسيله رمزنگاری های مختلف مثل RSA و AES يا بهتر ترکيبی از چند الگوريتم نگهداری کنيد و خود فايل برنامه هم پک کنيد

AliRezaBeytari
شنبه 19 اردیبهشت 1394, 18:30 عصر
به طور مثال ، شما میتونید به شکل زیر عمل کنید :
#include <QCoreApplication>
#include <QFile>
#include <iostream>
#include <QDataStream>

using namespace std;
struct test_t
{
int index;
QString data;
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);


QFile i_file("D:/saalaam.txt");
i_file.open(QIODevice::ReadWrite);

test_t t;
QDataStream i_stream(&i_file);
//Read Data:

if (i_file.isOpen())
{

if (i_file.exists())
{
while (!i_stream.atEnd())
{

i_stream>>t.index>>t.data;
cout<<t.index<<" "<<t.data.toStdString()<<"\n";
//i_file.seek(sizeof(t));

}

}

for (int counter = 0; counter < 4; ++counter)
{
t.index=counter;
t.data=QString("x").repeated(counter);
i_stream<<t.index<<t.data;
}

}

i_file.close();
return a.exec();
}


خب تو این هم که اطلاعات به صورت رشته ای نمایش داده میشه !!!

returnx
شنبه 19 اردیبهشت 1394, 23:12 عصر
خب تو این هم که اطلاعات به صورت رشته ای نمایش داده میشه !!!
نه! شما فقط بعضی از مقادیر رشته ای را به این صورت میبینید برای مثال تصویر زیر تصویر محتوای یک فایل اجرایی در ویندوز هست که به صورت ترتیبی باز شده همون طور که در تصویر با رنگ صورتی مشخص شده شما بعضی از مقادیر رشته ای را میتونید ببنید اما اونچیزی که اهمیت داره ، اینکه چون ما دقیقا با structure فایل اجرایی آشنا نیستیم (اینجا از فایل اجرایی به عنوان مثال استفاده شده ، منظور فایل تصادفی است) ، نمیتونیم به راحتی اطلاعات را استخراج کنیم :
131057
آنچیزی که در فایل های تصادفی بیشتر مورد توجه است ، ساختار فایل هست به همین دلیل هست که به طور مثال شما به راحتی نمیتوانید از یک فایل با قالب خاصی مثل (PNG) استفاده کنید ، مگر اینکه از ساختار(قالب) فایل با خبر باشید...
باید بگم که به طور مثال اگر شما کد مثال من را نمیدید و فقط فایل در اختیار شما قرار میگرفت ، نمیتونستید به راحتی متوجه ساختار فایل بشید...