سؤال

أقوم بتطوير تطبيق يحتاج إلى تخزين أسرار في قاعدة بيانات.

أحتاج إلى قاعدة بيانات محمولة (مثل Firebird، Sqlite، إلخ) حيث سيتم تخزين البيانات المشفرة أو حماية كلمة المرور أو كليهما ...

لنأخذ على سبيل المثال أريد إنشاء مدير كلمة المرور. سأحتاج إلى تخزين كلمات المرور في قاعدة البيانات. أنا معتاد على استخدام Firebird تضمين، ولكن ليس للبيانات السرية.

حل آخر هو استخدام قاعدة البيانات بشكل طبيعي وتشفير ملف قاعدة البيانات عندما لا أكون متصلا بالملف، لكنني لست متأكدا من آثار الأمان أو الأداء.

ما هي أفضل طريقة تنصحني؟

هل كانت مفيدة؟

المحلول

هناك مشروع يسمى sqlite-crypt.. وبعد الذي يجب أن يكون أفضل رهان الخاص بك. SQLite DB مع جميع البيانات على القرص المشفرة.

نصائح أخرى

يمكنك أيضا إلقاء نظرة على إصدار SQL Server Compact Edition، والذي يتطلب فقط DLL وسيقوم بتخزين البيانات في ملف واحد، تماما مثل SQLite أو Access، Firebird، إلخ.

كما أن لديها قدرات التشفير المدمجة.

بعض المراجع:

تشفير كلمة المرور

انظر جوابي على سؤال آخر OS SO.

بكل صراحه؟ يستخدم TrueCrypt. أو حفانة.

وأنا أتفق مع CJM، ولكن إذا كنت مسدود على كتابة بلدك، يجب عليك تشفير الدفق في وقت الكتابة وزهرته في وقت القراءة. أي خوارزمية منشورة قوية إلى حد ما يجب أن تبقي الأمور آمنة.

عمل الدعم المدمج للعمل مع قواعد بيانات SQLite المشفرة جيدا بالنسبة لي في بضعة مشاريع.

أنا نوصي بشدة بالتسجيل Sqlcipher. (كامل الإفصاح، أنا أحد المطورين!) إنه تنفيذ مجاني ومفتوح تشفير شفافة على مستوى الصفحة ل SQLite. التنفيذ قوي إلى حد ما، إنه قيد التطوير النشط، ومن السهل الاستخدام للغاية (يتحدث نسبيا).

أنا ثاني الاقتراح لاستخدام حفانة. إنه متجر رائع للبيانات الحساسة ويعرض API جيد جدا. إليك مثال على كيفية قراءة قاعدة بيانات Keypass 2 القياسية:

var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";

var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));

var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);

var kpdata = from entry in db.RootGroup.GetEntries(true)
                select new
                {
                    Group = entry.ParentGroup.Name,
                    Title = entry.Strings.ReadSafe("Title"),
                    Username = entry.Strings.ReadSafe("UserName"),
                    Password = entry.Strings.ReadSafe("Password"),
                    URL = entry.Strings.ReadSafe("URL"),
                    Notes = entry.Strings.ReadSafe("Notes")

                };                                      
db.Close();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top