Ես ունեմ sqlite3 db, որը տեղադրում եմ/ընտրում եմ python-ում: Հավելվածը հիանալի է աշխատում, բայց ես ուզում եմ այն կսմթել, որպեսզի ոչ ոք չկարողանա կարդալ DB-ից առանց գաղտնաբառի: Ինչպե՞ս կարող եմ դա անել python-ում: Նշում, ես գաղափար չունեմ, թե որտեղից սկսել:
Կոդավորված ֆայլ կամ db python-ում
Պատասխանները:
Դուք կարող եք օգտագործել SQLCipher:
Բաց կոդով ամբողջական տվյալների բազայի գաղտնագրում SQLite-ի համար
SQLCipher-ը SQLite ընդլայնում է, որն ապահովում է տվյալների բազայի ֆայլերի թափանցիկ 256-բիթանոց AES կոդավորումը: Էջերը կոդավորված են սկավառակի վրա գրվելուց առաջ և գաղտնազերծվում են հետ կարդալիս: Փոքր տարածության և հիանալի կատարողականության շնորհիվ այն իդեալական է ներկառուցված հավելվածների տվյալների բազաները պաշտպանելու համար և հարմար է բջջային զարգացման համար:
- Բոցավառ արագ կատարողականություն՝ 5-15% գերավճարով բազմաթիվ գործողությունների գաղտնագրման համար
- Տվյալների բազայի ֆայլի տվյալների 100%-ը գաղտնագրված է: Օգտագործում է անվտանգության լավ պրակտիկա (CBC ռեժիմ, բանալիների ստացում)
- Զրոյական կոնֆիգուրացիայի և կիրառական մակարդակի ծածկագրման լայն հարթակ
- Աջակցություն. աշխատում է C/C++, Obj-C, QT, Win32/.NET, Java, Python, Ruby և այլն Windows, Linux, iPhone/iOS…
Ես նույն խնդիրն ունեի։ Իմ հավելվածը կարող է միաժամանակ մի քանի օրինակներ ունենալ: Դրա պատճառով ես չեմ կարող պարզապես գաղտնագրել sqlite db ֆայլը և ավարտել դրա հետ: Ես նաև չեմ հավատում, որ python-ում տվյալների կոդավորումը լավ գաղափար է, քանի որ այս վիճակում չեք կարող տվյալների բազայում որևէ լուրջ մանիպուլյացիա անել:
Հաշվի առնելով այդ սահմանափակումները՝ ես հանդես եմ եկել հետևյալ երկու լուծումներով.
Օգտագործեք վերը նշված SQLCipher-ը: Խնդիրները, որոնք ես տեսնում եմ այստեղ, այն է, որ ես պետք է գրեմ իմ սեփական կապերը Python-ի համար և ինքս կազմեմ այն (կամ վճարեմ վճարը): Ես կարող եմ դա անել երկու դեպքում էլ, քանի որ դա հիանալի լուծում կլինի Python-ի այլ մշակողների համար: Եթե հաջողվի, կհրապարակեմ ետ լուծումով։
Եթե 1-ին տարբերակն ինձ համար չափազանց դժվար է կամ շատ ժամանակատար, ես կօգտագործեմ այս մեթոդը: Այս մեթոդը այնքան էլ ապահով չէ: Ես կօգտագործեմ pycrypto տվյալների բազայի ֆայլը կոդավորելու համար: Ես կիրականացնեմ SQL սերվեր, որը կվերծանի տվյալների բազայի ֆայլը, այնուհետև կկարգավորի տարբեր հաճախորդների հարցումները: Ամեն անգամ, երբ չկան չմարված հարցումներ, այն նորից կոդավորի տվյալների բազան: Սա ավելի դանդաղ կլինի, ընդհանուր առմամբ, և տվյալների բազան կթողնի ժամանակավոր ապակոդավորված վիճակներում:
Հուսով եմ, որ այս գաղափարները կօգնեն հաջորդ տղային:
Խմբագրել 1/13/2013
Ես հրաժարվեցի SQLCipher-ից, քանի որ կարծես թե չկարողացա ստիպել այն կոմպիլյացիայի ենթարկել, և կոդերի բազան փորձում է օգտագործել OpenSSL-ը, որը թեև ձայնային գրադարան է, բայց բավականին զանգվածային է պարզ AES 128-ի համար նախատեսված կոդի բազայի համար:
Ես գտա մեկ այլ տարբերակ wxSQLite3 և պարզեցի, թե ինչպես կարելի է առանձնացնել միայն SQLite գաղտնագրման հատվածը՝ https://github.com/shenghe/FreeSQLiteEncryption: Ես կարողացա հավաքել և աշխատել (SQLite3-ի վերջին տարբերակով): wxSQLite3-ը նաև աջակցում է AES 256-ին, որն իսկապես հիանալի է: Իմ հաջորդ քայլը լինելու է փորձը կազմելու pysqlite (որը sqlite գրադարանը, որը ներկառուցված է python-ում) փոփոխված sqlite3.dll-ով: Եթե դա աշխատի, ես կսմթեմ pysqlite-ը` աջակցելու wxSQLite3-ի sqlite3.dll-ի ընդլայնված, գաղտնագրման հատվածին: Ամեն դեպքում, ես կփորձեմ թարմացնել այս թեման իմ արդյունքներով, իսկ հաջողության դեպքում կտեղադրեմ վերջնական կոդի բազան՝ կառուցման հրահանգներով, Github-ում։
Ինչպես առաջարկում է Frontware-ը, կարող եք օգտագործել sqlcipher:
pysqlcipher python փաթեթը կարող է հեշտացնել այն օգտագործելը, քանի որ այն օգտագործում է sqlcipher կոդերի միավորումը ընդլայնումը կազմելու համար:
Դա պետք է լինի պարզապես pysqlcipher-ի օգտագործման խնդիր, ինչպես կօգտագործեիք սովորական sqlite.dbapi2-ը, պարզապես սահմանելով ճիշտ կրիպտոպրագմաներ:
SQLite տվյալների բազաները բավականին ընթեռնելի են մարդու կողմից, և ներկառուցված գաղտնագրում չկա:
Մտահոգվա՞ծ եք, որ ինչ-որ մեկը մուտք գործի և կարդում է տվյալների բազայի ֆայլերը ուղղակիորեն կամ մուտք գործելու դրանք ձեր ծրագրի միջոցով:
Ես ենթադրում եմ առաջինը, քանի որ վերջինս իրականում կապված չէ տվյալների բազայի հետ. դա ձեր դիմումի անվտանգությունն է, որի մասին դուք հարցնում եք:
Մի քանի տարբերակ գալիս է մտքում.
- Պաշտպանեք db-ն ոչ թե գաղտնագրման, այլ ֆայլային համակարգի թույլտվություններով: Դուք չեք նշել, թե որն է ձեր միջավայրը, այնպես որ ես չեմ կարող ասել՝ սա ձեզ համար կիրառելի է, թե ոչ, բայց դա, հավանաբար, ամենապարզ և ամենահուսալի միջոցն է, քանի որ չեք կարող փորձել վերծանել այն, ինչ չեք կարող կարդալ:
- Գաղտնագրեք Python-ում նախքան գրելը, և ապակոդավորեք Python-ում՝ կարդալուց հետո: Բավականին պարզ է, բայց դուք կորցնում եք SQL-ի հավաքածուների վրա հիմնված համապատասխանող գործողությունների հզորության մեծ մասը:
- Անցում այլ տվյալների բազայի; Օգտագործողի նույնականացումը և թույլտվությունները բազմաբնակարան օգտատերերի տվյալների բազաների ստանդարտ հատկանիշներն են: Երբ դուք դեմ եք որևէ գործիքի սահմանափակումներին, ավելի հեշտ կլինի նայել այլ գործիքներին, այլ ոչ թե նոր հնարավորություններ կոտրել ընթացիկ գործիքի մեջ:
կարող եք օգտագործել pysqlitecipher մոդուլը - https://github.com/harshnative/pysqlitecipher ա>
Դուք կկորցնեք ներկառուցված sqlite-ի առանձնահատկությունները, բայց դուք կարող եք դրանք իրականացնել անմիջապես python-ում, ինչպիսիք են հարցումները և այլն: Այն կառավարում է գաղտնագրումը հետին պլանում, այնպես որ դուք կարիք չունեք անհանգստանալու, նաև կոդավորման ստանդարտը նույնպես հիանալի է:
Խնդիրը լուծված է վերը նշված մոդուլով - Դրանցը հեշտ լուծում չէ կոդավորված sqlite տվյալների բազայի համար՝ օգտագործելով python:
Բոլոր առկա լուծումները դժվար է կարգավորել, և եթե դուք ստանում եք , ապա լուծումը գործարկվողի փոխակերպելը նույնիսկ ավելի դժվար է:
Բայց pysqlitecipher-ը կառուցված է հիմնական python-ի վրա, ուստի այն հեշտությամբ փոխակերպվում է exe-ի՝ օգտագործելով մոդուլներ, ինչպիսիք են pyinstaller-ը: