J'apprends juste à utiliser SQLite et j'étais curieux de savoir si cela est possible:
Chiffrement du fichier de base de données?
Mot de passe protéger l'ouverture de la base de données?
PS. Je sais qu'il existe cette «extension de chiffrement SQLite (SEE)», mais selon la documentation, «Le SEE est un logiciel sous licence…» et «Le coût d'une licence de code source perpétuelle pour SEE est de 2000 $ US».
Réponses:
SQLite a des hooks intégrés pour le cryptage qui ne sont pas utilisés dans la distribution normale, mais voici quelques implémentations que je connais:
Le SEE et SQLiteCrypt nécessitent l'achat d'une licence.
Divulgation: j'ai créé botansqlite3.
la source
Vous pouvez protéger par mot de passe SQLite3 DB. Pour la première fois avant d'effectuer toute opération, définissez le mot de passe comme suit.
puis la prochaine fois, vous pourrez y accéder comme
Cela ne permettra à aucun éditeur d'interface graphique de visualiser vos données. Plus tard, si vous souhaitez modifier le mot de passe, utilisez
conn.ChangePassword("new_password");
Pour réinitialiser ou supprimer le mot de passe, utilisezconn.ChangePassword(String.Empty);
la source
ChangePassword
utilisée? AES 128? RSA ..?SetPassword
méthode (pour le moment) semble fondamentalement inutile. La seule façon dont j'ai pu obtenir laSystem.Data.SQLite
bibliothèque pour appliquer correctement le mot de passe était d'utiliser laChangePassword
méthode. En utilisantSetPassword
( avant d' appeler laOpen
méthode, comme cela est apparemment requis par la bibliothèque), je pouvais toujours ouvrir et modifier la base de données dans SQLiteStudio sans aucun mot de passe. Ce n'est que lorsque j'ai utilisé laChangePassword
méthode ( après avoir appelé laOpen
méthode) que l'application de mot de passe s'est réellement "bloquée".La bibliothèque .net System.Data.SQLite assure également le chiffrement.
la source
Vous pouvez obtenir un
sqlite3.dll
fichier avec prise en charge du chiffrement à partir de http://system.data.sqlite.org/ .1 - Allez sur http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki et téléchargez l'un des packages. La version .NET n'est pas pertinente ici.
2 - Extrayez le
SQLite.Interop.dll
package et renommez-le ensqlite3.dll
. Cette DLL prend en charge le cryptage via des mots de passe en clair ou des clés de cryptage.Le fichier mentionné est natif et ne nécessite PAS de framework .NET. Il peut avoir besoin de Visual C ++ Runtime en fonction du package que vous avez téléchargé.
METTRE À JOUR
Voici le package que j'ai téléchargé pour le développement 32 bits: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
la source
.lib
que je pourrais intégrer dans mon exécutable. Je ne pouvais pas avoir de dll.lib
etdll
.Gardez à l'esprit que ce qui suit n'est pas destiné à remplacer une solution de sécurité appropriée.
Après avoir joué avec cela pendant quatre jours, j'ai mis en place une solution en utilisant uniquement le package open source System.Data.SQLite de NuGet. Je ne sais pas quelle protection cela offre. Je ne l'utilise que pour mon propre programme d'études. Cela créera la base de données, la chiffrera, créera une table et ajoutera des données.
Vous pouvez éventuellement le supprimer
conn.SetPassword(passwordBytes);
et le remplacer par celuiconn.ChangePassword("password");
qui doit être placé aprèsconn.Open();
au lieu d’avant. Ensuite, vous n'aurez pas besoin de la méthode GetBytes.Pour déchiffrer, il suffit de mettre le mot de passe dans votre chaîne de connexion avant l'appel à ouvrir.
la source
"I think I saw 128 bit somewhere"
- c'est une très mauvaise déclaration si vous prévoyez de traiter le cryptage. La règle de base est que vous ne le faites jamais vous -même si vous ne le comprenez pas. Sinon, vous feriez mieux de ne pas l'utiliser du tout.Vous pouvez toujours crypter les données côté client. Veuillez noter que toutes les données ne doivent pas être cryptées car elles présentent un problème de performances.
la source
Eh bien,
SEE
c'est cher. Cependant, ilSQLite
a une interface intégrée pour le cryptage (pager). Cela signifie qu'en plus du code existant, on peut facilement développer un mécanisme de cryptage, ce n'est pas nécessaireAES
. Rien? Vraiment. S'il vous plaît voir mon message ici: https://stackoverflow.com/a/49161716/9418360Vous devez définir SQLITE_HAS_CODEC = 1 pour activer le chiffrement du téléavertisseur. Exemple de code ci-dessous (
SQLite
source d' origine ):Il existe une version commerciale
C language
pour leSQLite
chiffrement en utilisant AES256 - il peut aussi travailler avecPHP
, mais il doit être compilé avecPHP
et l'SQLite
extension. Il dé / crypte leSQLite
fichier de base de données à la volée, le contenu du fichier est toujours crypté. Très utile.http://www.iqx7.com/products/sqlite-encryption
la source
Vous pouvez utiliser les routines de création de fonctions de SQLite ( manuel PHP ):
Lors de l'insertion de données, vous pouvez utiliser la fonction de cryptage directement et INSÉRER les données cryptées ou vous pouvez utiliser la fonction personnalisée et transmettre des données non cryptées:
Lors de la récupération de données, vous pouvez également utiliser la fonctionnalité de recherche SQL:
la source