আমি কেবল এসকিউএলাইট ব্যবহার করতে শিখছি এবং যদি সম্ভব হয় তবে আমি আগ্রহী ছিলাম:
ডাটাবেস ফাইলটির এনক্রিপশন?
পাসওয়ার্ডটি ডাটাবেস খোলার সুরক্ষা দেয়?
পুনশ্চ. আমি জানি যে এই "এসকিউএলাইট এনক্রিপশন এক্সটেনশন (এসই)" রয়েছে but
আমি কেবল এসকিউএলাইট ব্যবহার করতে শিখছি এবং যদি সম্ভব হয় তবে আমি আগ্রহী ছিলাম:
ডাটাবেস ফাইলটির এনক্রিপশন?
পাসওয়ার্ডটি ডাটাবেস খোলার সুরক্ষা দেয়?
পুনশ্চ. আমি জানি যে এই "এসকিউএলাইট এনক্রিপশন এক্সটেনশন (এসই)" রয়েছে but
উত্তর:
এসকিউএলাইটে এনক্রিপশনের জন্য অন্তর্নির্মিত হুক রয়েছে যা সাধারণ বিতরণে ব্যবহৃত হয় না, তবে আমি জানি এমন কয়েকটি বাস্তবায়ন এখানে রয়েছে:
এসইই এবং এসকিউএলক্রিপ্টের জন্য লাইসেন্স কেনার প্রয়োজন।
প্রকাশ: আমি বোটানস্ক্লাইট 3 তৈরি করেছি।
আপনি এসকিউএল 3 ডিবি পাসওয়ার্ডটি সুরক্ষা দিতে পারেন। কোনও ক্রিয়াকলাপ করার আগে প্রথমবারের মতো নীচে পাসওয়ার্ড সেট করুন।
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.open();
তারপরে পরবর্তী সময় আপনি এটির মতো অ্যাক্সেস করতে পারবেন
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();
এটি কোনও জিইআইআই সম্পাদককে আপনার ডেটা দেখার অনুমতি দেবে না। পরে আপনি যদি পাসওয়ার্ড পরিবর্তন করতে চান তবে conn.ChangePassword("new_password");
পুনরায় সেট করতে বা পাসওয়ার্ড সরাতে ব্যবহার করুনconn.ChangePassword(String.Empty);
ChangePassword
ব্যবহার করা হয়েছে? এএস 128? আরএসএ ..?
SetPassword
পদ্ধতিটি (এই সময়ে) মূলত অকেজো বলে মনে হচ্ছে। System.Data.SQLite
পাসওয়ার্ডটি সঠিকভাবে প্রয়োগ করার জন্য আমি লাইব্রেরিটি পেতে সক্ষম হয়েছি সেই ChangePassword
পদ্ধতিটি ব্যবহার করা হয়েছিল । ব্যবহার SetPassword
( আগে কলিং Open
পদ্ধতি, যেমন দৃশ্যত গ্রন্থাগার দ্বারা প্রয়োজন বোধ করা হয়), তা সত্বেও যেকোনো ধরণের পাসওয়ার্ড ছাড়াই SQLiteStudio মধ্যে খুলুন এবং সম্পাদনা করতে ডিবি সক্ষম হন। যতক্ষণ না আমি ChangePassword
পদ্ধতিটি ব্যবহার করেছি (পদ্ধতিটি কল করার পরেOpen
) যে পাসওয়ার্ড অ্যাপ্লিকেশনটি আসলে "আটকে গেছে"।
.NET গ্রন্থাগার System.Data.SQLite এছাড়াও এনক্রিপশন সরবরাহ করে।
আপনি http://system.data.sqlite.org/sqlite3.dll
থেকে এনক্রিপশন সমর্থন সহ ফাইল পেতে পারেন ।
1 - http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki এ যান এবং একটি প্যাকেজ ডাউনলোড করুন। .NET সংস্করণটি এখানে অপ্রাসঙ্গিক।
2 - SQLite.Interop.dll
প্যাকেজ থেকে এক্সট্রাক্ট করে এর নাম পরিবর্তন করুন sqlite3.dll
। এই ডিএলএল প্লেইন টেক্সট পাসওয়ার্ড বা এনক্রিপশন কীগুলির মাধ্যমে এনক্রিপশন সমর্থন করে।
উল্লিখিত ফাইলটি স্থানীয় এবং নোট ফ্রেমওয়ার্কের প্রয়োজন হয় না । আপনার ডাউনলোড করা প্যাকেজটির উপর নির্ভর করে এর জন্য ভিজ্যুয়াল সি ++ রানটাইম প্রয়োজন হতে পারে।
হালনাগাদ
এটিই প্যাকেজ যা আমি 32-বিট বিকাশের জন্য ডাউনলোড করেছি: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
.lib
এমন একটি দরকার ছিল যা আমি আমার এক্সিকিউটেবলের মধ্যে এম্বেড করতে পারি। আমার কোনও ঘর ছিল না।
মনে রাখবেন, নিম্নলিখিতগুলি সঠিক সুরক্ষা সমাধানের বিকল্প হিসাবে বিবেচিত নয়।
চার দিন এটি নিয়ে খেলা করার পরে, আমি নিউজেট থেকে কেবল ওপেন সোর্স সিস্টেম.ডাটা.এসকিউএলাইট প্যাকেজ ব্যবহার করে একটি সমাধান রেখেছি। আমি জানি না এটি কতটা সুরক্ষা সরবরাহ করে। আমি কেবল এটি আমার নিজস্ব পড়াশোনার জন্য ব্যবহার করছি। এটি ডিবি তৈরি করবে, এটিকে এনক্রিপ্ট করবে, একটি সারণী তৈরি করবে এবং ডেটা যুক্ত করবে।
using System.Data.SQLite;
namespace EncryptDB
{
class Program
{
static void Main(string[] args)
{
string connectionString = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
byte[] passwordBytes = GetBytes(passwordString);
SQLiteConnection.CreateFile(connectionString);
SQLiteConnection conn = new SQLiteConnection("Data Source=" + connectionString + ";Version=3;");
conn.SetPassword(passwordBytes);
conn.Open();
SQLiteCommand sqlCmd = new SQLiteCommand("CREATE TABLE data(filename TEXT, filepath TEXT, filelength INTEGER, directory TEXT)", conn);
sqlCmd.ExecuteNonQuery();
sqlCmd = new SQLiteCommand("INSERT INTO data VALUES('name', 'path', 200, 'dir')", conn);
sqlCmd.ExecuteNonQuery();
conn.Close();
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
bytes = System.Text.Encoding.Default.GetBytes(str);
return bytes;
}
}
}
Allyচ্ছিকভাবে, আপনি এটি অপসারণ করতে conn.SetPassword(passwordBytes);
এবং এটির পরিবর্তে আগের পরিবর্তে conn.ChangePassword("password");
স্থাপন করা দরকার conn.Open();
। তারপরে আপনার গেটবাইটস পদ্ধতি প্রয়োজন হবে না।
ডিক্রিপ্ট করার জন্য, কলটি খোলার আগে পাসওয়ার্ডটি আপনার সংযোগের স্ট্রিংয়ে রাখার বিষয়।
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();
"I think I saw 128 bit somewhere"
- আপনি যদি এনক্রিপশন মোকাবেলার পরিকল্পনা করে থাকেন তবে এটি খুব খারাপ বক্তব্য। থাম্বের নিয়ম হ'ল আপনি যদি তা বুঝতে না পারেন তবে আপনি নিজে কখনও তা করেন না। অন্যথায় আপনি এটিকে ব্যবহার না করেই ভাল থাকবেন।
ভাল, SEE
ব্যয়বহুল। তবে SQLite
এনক্রিপশন (পেজার) এর জন্য ইন্টারফেস অন্তর্নির্মিত রয়েছে। এর অর্থ, বিদ্যমান কোডের উপরে যে কেউ সহজেই কিছু এনক্রিপশন প্রক্রিয়া বিকাশ করতে পারে, এমনটি হবে না AES
। কিছু হলেই হলো. দয়া করে আমার পোস্টটি এখানে দেখুন: https://stackoverflow.com/a/49161716/9418360
পেজার এনক্রিপশন সক্ষম করতে আপনাকে SQLITE_HAS_CODEC = 1 নির্ধারণ করতে হবে need নীচে নমুনা কোড (মূল SQLite
উত্স):
#ifdef SQLITE_HAS_CODEC
/*
** This function is called by the wal module when writing page content
** into the log file.
**
** This function returns a pointer to a buffer containing the encrypted
** page content. If a malloc fails, this function may return NULL.
*/
SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
void *aData = 0;
CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
return aData;
}
#endif
AES256 ব্যবহার করে এনক্রিপশনের C language
জন্য একটি বাণিজ্যিক সংস্করণ রয়েছে SQLite
- এটি এর সাথেও কাজ PHP
করতে পারে তবে এটি সংকলন PHP
এবং SQLite
প্রসারিত করা দরকার। এটি ফ্লাইতে SQLite
ডাটাবেস ফাইলটিকে ডি / এনক্রিপ্ট করে, ফাইলের সামগ্রীগুলি সর্বদা এনক্রিপ্ট থাকে। খুব দরকারী.
আপনি এসকিউএলাইটের ফাংশন তৈরি রুটিন ( পিএইচপি ম্যানুয়াল ) ব্যবহার করতে পারেন :
$db_obj->sqliteCreateFunction('Encrypt', 'MyEncryptFunction', 2);
$db_obj->sqliteCreateFunction('Decrypt', 'MyDecryptFunction', 2);
ডেটা tingোকানোর সময়, আপনি সরাসরি এনক্রিপশন ফাংশনটি ব্যবহার করতে পারেন এবং এনক্রিপ্ট করা ডেটা অন্তর্ভুক্ত করতে পারেন বা আপনি কাস্টম ফাংশনটি ব্যবহার করতে পারবেন এবং এনক্রিপ্ট করা ডেটা পাস করতে পারবেন:
$insert_obj = $db_obj->prepare('INSERT INTO table (Clear, Encrypted) ' .
'VALUES (:clear, Encrypt(:data, "' . $passwordhash_str . '"))');
ডেটা পুনরুদ্ধার করার সময়, আপনি এসকিউএল অনুসন্ধান কার্যকারিতাও ব্যবহার করতে পারেন:
$select_obj = $db_obj->prepare('SELECT Clear, ' .
'Decrypt(Encrypted, "' . $passwordhash_str . '") AS PlainText FROM table ' .
'WHERE PlainText LIKE :searchterm');