এনক্রিপশন / পাসওয়ার্ড সুরক্ষা সহ এসকিউএলাইট


136

আমি কেবল এসকিউএলাইট ব্যবহার করতে শিখছি এবং যদি সম্ভব হয় তবে আমি আগ্রহী ছিলাম:

  1. ডাটাবেস ফাইলটির এনক্রিপশন?

  2. পাসওয়ার্ডটি ডাটাবেস খোলার সুরক্ষা দেয়?

পুনশ্চ. আমি জানি যে এই "এসকিউএলাইট এনক্রিপশন এক্সটেনশন (এসই)" রয়েছে but


এটি অবশ্যই সম্ভব এবং এটি ছাড়াও বেশ কয়েকটি ওপেন সোর্স সমাধান রয়েছে। এর মধ্যে ডাব্লুএক্সএসকিউএলাইট 3 সহ এনক্রিপশন এক্সটেনশান আসছে। বিশদ জানতে আমার অনুরূপ প্রশ্নের উত্তর দেখুন।
উলিরিচ টেল

1
@ রোবটমেস: আপনার সাথে সৎ হতে - এখানে তালিকাভুক্তদের একটিও নয়। এই প্রকল্পে আমার কঠোর সময় বাধা ছিল, তাই আমাকে দ্রুত কিছু করতে হয়েছিল। আমি যা জানতাম তার সাথে আমি গিয়েছিলাম - ডিএস-এ রাখার আগে কাঁচা ডেটাতে এইএস ... অনুসন্ধান, অনুসন্ধান এবং ডিবি পরিচালনার ক্ষেত্রে এটি খুব কার্যকর নয়।
ahmd0

@ এএইচএমডি0 এইচএম, এটি কি ডিবিকে অকার্যকর করে তোলে না? আমি বলতে চাইছি, এটি এখন যা করে তা হ'ল কমিটগুলি পরমাণু নিশ্চিত করা।
নবীন

হ্যাঁ এটা সম্ভব. । নেট স্ট্যান্ডার্ড ৪. or.১+ বা কোরকে টার্গেট করা হলে, আমি মনে করি স্ক্লাইট এনক্রিপশন পেতে মোটামুটি সোজা আমি এখানে আমার উত্তর অনুযায়ী মাইক্রোসফট.ডাটা.স্ক্লাইট ব্যবহার করি ।
পলিব

উত্তর:


110

এসকিউএলাইটে এনক্রিপশনের জন্য অন্তর্নির্মিত হুক রয়েছে যা সাধারণ বিতরণে ব্যবহৃত হয় না, তবে আমি জানি এমন কয়েকটি বাস্তবায়ন এখানে রয়েছে:

  • দেখুন - অফিসিয়াল বাস্তবায়ন।
  • wxSQLite - একটি ডাব্লু এক্সজেডস স্টাইল সি ++ র‌্যাপার যা এসকিউএলাইটের এনক্রিপশন প্রয়োগ করে imple
  • এসকিউএলসিফার - প্রয়োগ করতে ওপেনএসএসএল এর লাইবক্রিপ্টো ব্যবহার করে।
  • এসকিউএলক্রিপ্ট - কাস্টম প্রয়োগ, সংশোধিত এপিআই।
  • botansqlite3 - botansqlite3 SQLite3 এর জন্য একটি এনক্রিপশন কোডেক যা এনক্রিপশনের জন্য বোটানের যে কোনও অ্যালগরিদম ব্যবহার করতে পারে।
  • স্ক্লিট - আর একটি এনক্রিপশন বাস্তবায়ন, ChaCha20 / Poly1305 আদিম ব্যবহার করে। নোট করুন যে উপরে উল্লিখিত ডাব্লুএক্সএসকিউএলাইট এটি ক্রিপ্টো সরবরাহকারী হিসাবে ব্যবহার করতে পারে।

এসইই এবং এসকিউএলক্রিপ্টের জন্য লাইসেন্স কেনার প্রয়োজন।

প্রকাশ: আমি বোটানস্ক্লাইট 3 তৈরি করেছি।


1
এসকিউএল ডাটাবেস এনক্রিপশনের জন্য কীভাবে বোটান ব্যবহারের কোনও ডকুমেন্টেশন রয়েছে? বোটান ওয়েবসাইটটিতে এই বৈশিষ্ট্যটির উল্লেখ নেই।
মার্ক শ্ল্যাশার

5
বোটানস্ক্লাইট 3 এখন বোটানের স্বতন্ত্রভাবে বিতরণ করা হয়েছে।
অলিজেজি

1
রয়েছে litereplica । এটি চাচা সিফার ব্যবহার করে, এআরএমভি 7
বার্নার্ডো রামোস

এসকিউএলাইট 3। নেট এখন এনক্রিপশনের সমর্থনে তৈরি, যা এই উত্তরকে মূলত অকার্যকর করে দেয়।
Krythic

21

আপনি এসকিউএল 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);


16
ওপেন সোর্স স্ক্লাইটের সাথে কাজ করবে না। কোন ভাষা প্রয়োগ, ভাষা বা এপিআই হওয়ার কথা এটি কোনও ক্লু নেই।
মিকেরোবি

1
আমি কীভাবে জানতে পারি কোন এনক্রিপশন উপায়টি ChangePasswordব্যবহার করা হয়েছে? এএস 128? আরএসএ ..?
কাকমাক

1
আরএসএ 1024 না 2048? এমন কোনও বিবরণ কি কোনও দলিল দেখতে পাবে?
কাকমাক


আমার নিজের পরীক্ষায়, আমি খুঁজে পেয়েছি যে SetPasswordপদ্ধতিটি (এই সময়ে) মূলত অকেজো বলে মনে হচ্ছে। System.Data.SQLiteপাসওয়ার্ডটি সঠিকভাবে প্রয়োগ করার জন্য আমি লাইব্রেরিটি পেতে সক্ষম হয়েছি সেই ChangePasswordপদ্ধতিটি ব্যবহার করা হয়েছিল । ব্যবহার SetPassword( আগে কলিং Openপদ্ধতি, যেমন দৃশ্যত গ্রন্থাগার দ্বারা প্রয়োজন বোধ করা হয়), তা সত্বেও যেকোনো ধরণের পাসওয়ার্ড ছাড়াই SQLiteStudio মধ্যে খুলুন এবং সম্পাদনা করতে ডিবি সক্ষম হন। যতক্ষণ না আমি ChangePasswordপদ্ধতিটি ব্যবহার করেছি (পদ্ধতিটি কল করার পরেOpen ) যে পাসওয়ার্ড অ্যাপ্লিকেশনটি আসলে "আটকে গেছে"।
জি_হোসা_পট

15

.NET গ্রন্থাগার System.Data.SQLite এছাড়াও এনক্রিপশন সরবরাহ করে।


8
এএসপি.নেট! = এসকিউএল সার্ভার! = এসকিউএল সার্ভারের ইনস্টল ইনস্ট্যান্স
জেভ স্পিটজ

1
কিন্তু System.Data.SQLite মাইক্রোসফ্ট থেকে নয়। এই প্রশ্নটি। নেট সম্পর্কে নয় তবে এটি যদি তখন অন্য সামঞ্জস্য এবং অসঙ্গতিগুলি গুরুত্বপূর্ণ হত।
ব্যবহারকারী 34660

7

আপনি 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এমন একটি দরকার ছিল যা আমি আমার এক্সিকিউটেবলের মধ্যে এম্বেড করতে পারি। আমার কোনও ঘর ছিল না।
ahmd0

2
দয়া করে এটির একটি github.com/rindeal/wxSQLite3-VS পরীক্ষা করুন যা আপনাকে একটি libএবং dllফাইল দেবে।
মোহাম্মদ বনিশায়দ

4

মনে রাখবেন, নিম্নলিখিতগুলি সঠিক সুরক্ষা সমাধানের বিকল্প হিসাবে বিবেচিত নয়।

চার দিন এটি নিয়ে খেলা করার পরে, আমি নিউজেট থেকে কেবল ওপেন সোর্স সিস্টেম.ডাটা.এসকিউএলাইট প্যাকেজ ব্যবহার করে একটি সমাধান রেখেছি। আমি জানি না এটি কতটা সুরক্ষা সরবরাহ করে। আমি কেবল এটি আমার নিজস্ব পড়াশোনার জন্য ব্যবহার করছি। এটি ডিবি তৈরি করবে, এটিকে এনক্রিপ্ট করবে, একটি সারণী তৈরি করবে এবং ডেটা যুক্ত করবে।

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();

2
"I think I saw 128 bit somewhere"- আপনি যদি এনক্রিপশন মোকাবেলার পরিকল্পনা করে থাকেন তবে এটি খুব খারাপ বক্তব্য। থাম্বের নিয়ম হ'ল আপনি যদি তা বুঝতে না পারেন তবে আপনি নিজে কখনও তা করেন না। অন্যথায় আপনি এটিকে ব্যবহার না করেই ভাল থাকবেন।
ahmd0

আমি আপনার পয়েন্ট দেখুন. আমি বেশিরভাগ সেই পরামর্শটি সংশোধন করার চেষ্টা করছিলাম যা আমি দেখেছি যা সিস্টেম.ডাটা.স্ক্লাইটের বর্তমান সংস্করণে কাজ করে না। আমি বোঝাতে চাইনি যে এটি ছিল ভাল সুরক্ষা। আমি আমার পোস্ট আপডেট করেছি। ইনপুট জন্য ধন্যবাদ!
মাইক ওয়ার্নার

2

আপনি সর্বদা ক্লায়েন্ট পক্ষের ডেটা এনক্রিপ্ট করতে পারেন। দয়া করে নোট করুন যে সমস্ত ডেটাই এনক্রিপ্ট করতে হবে না কারণ এতে পারফরম্যান্সের সমস্যা রয়েছে।


1

ভাল, 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ডাটাবেস ফাইলটিকে ডি / এনক্রিপ্ট করে, ফাইলের সামগ্রীগুলি সর্বদা এনক্রিপ্ট থাকে। খুব দরকারী.

http://www.iqx7.com/products/sqlite-encryption


0

আপনি এসকিউএলাইটের ফাংশন তৈরি রুটিন ( পিএইচপি ম্যানুয়াল ) ব্যবহার করতে পারেন :

$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');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.