Maison  >  Article  >  base de données  >  Partager comment chiffrer et déchiffrer la base de données SQLCipher

Partager comment chiffrer et déchiffrer la base de données SQLCipher

零下一度
零下一度original
2017-05-06 14:57:403521parcourir

Introduction :

Lors de l'utilisation de la base de données SQLite, les exigences en matière de base de données sont parfois relativement élevées, en particulier dans iOS8. .3, les systèmes non jailbreakés peuvent également utiliser des outils pour obtenir des fichiers dans le sandbox de l'application. À ce stade, nous pouvons envisager de chiffrer la base de données SQLite, afin de ne pas avoir à nous soucier de la fuite du fichier sqlite

.

Habituellement, la base de données Il existe généralement deux méthodes de cryptage

1. Crypter toutes les données

2. Crypter les fichiers de la base de données

Bien que la première méthode crypte les données, elle n'est pas complet. Les informations telles que la structure de la table peuvent être visualisées via la base de données et les données de la base de données sont dispersées. Le cryptage et le déchiffrement de toutes les données affecteront sérieusement les performances. L'approche habituelle consiste à chiffrer les fichiers.


La version gratuite iOS de la bibliothèque sqlite ne fournit pas de fonctions de chiffrement. SQLite fournit uniquement une interface chiffrée, mais elle n'est pas implémentée. Les bibliothèques de chiffrement suivantes sont prises en charge sur iOS

Le. SQLite Encryption Extension (SEE)

Payant, il existe les méthodes de cryptage suivantes RC4

AES-128 in OFB mode
AES-128 in CCM mode
AES-256 in OFB mode
SQLiteEncrypt

Payant, utilise le cryptage AES

SQLiteCrypt

Payant, utilise le cryptage AES 256 bits

SQLCipher

Open source, hébergé sur github, implémente l'interface de cryptage officielle SQLite et ajoute également de nouvelles interfaces, voir ici pour plus de détails

Les trois premiers sont payants, SQLCipher est open source, ici nous utilisons SQLCipher.

SQLCipher est disponible en version gratuite et payante. Voici les différences indiquées par le site officiel :

easier to setup, saving many steps in project configuration
pre-built with a modern version of OpenSSL, avoiding another externaldependency
much faster for each build cycle becausethe library doesn't need to be built from scratch on each compile (build timecan be up to 95% faster with the static libraries)

Analyse :

C'est juste plus facile à intégrer, pas besoin d'ajouter une bibliothèque de dépendances OpenSSL et se compile plus rapidement, il n'y a pas de différence fonctionnelle. Dépenser des centaines de dollars juste pour la commodité mentionnée ci-dessus n'en vaut pas la peine pour les diététistes qui travaillent dur comme moi. Heureusement, il existe une version gratuite.

SQLite est une base de données légère open source. Android et iOS l'utilisent désormais pour stocker des données structurées, mais la version cryptée n'est pas open source. Pour faire un compromis, nous ne pouvons trouver que des solutions open source. SQLcipher est un bon choix. Il peut crypter SQLite et dispose de bibliothèques correspondantes pour le décryptage et la lecture sous Android et iOS. Cependant, la bibliothèque introduite augmentera la taille des applications. SQLCipher est une bibliothèque open source qui fournit un cryptage AES 256 bits transparent et sécurisé des fichiers de base de données SQLite. Pour plus de commodité, nous utilisons directement FMDB pour faire fonctionner la base de données. FMDB prend également en charge SQLCipher

pod. 'FMDB/SQLCipher', '~> 2.6.2' //Affichez la version dont vous avez besoin

Si elle est manuelle, procédez comme suit :

1. master de www.zetetic.net/sqlcipher/ios-tutorial/

Le .xcodeproj est importé dans le projet en tant que bibliothèque

statique

Fichier .xcodeproj

Il s'agit du module statique de chiffrement SQLCipher ;

Partager comment chiffrer et déchiffrer la base de données SQLCipherDeuxièmement, configurez Xcode

Utilisez la macro (SQLITE_HAS_CODEC) pour configurer SQLite pour activer le module de chiffrement. Nous devons configurer la macro pour activer le composant du module de chiffrement dans Xcode.

(1) cible -> Paramètres de construction -> Autres indicateurs C Ajoutez -DSQLITE_HAS_CODEC, -DSQLITE_TEMP_STORE=2, -DSQLITE_THREADSAFE, -DSQLCIPHER_CRYPTO_CC plusieurs configurations.

Si la méthode SQLITE_HAS_CODEC setKey : n'est pas configurée, la méthode ne sera pas chiffrée

(2) cible -> Paramètres de construction -> Autres indicateurs de liaison Configuration de sécurité du framework.

(3) Importez le fichier libsqlcipher.a dans TARGETS

.a fichier

3. Ajoutez le code de cryptage

Partager comment chiffrer et déchiffrer la base de données SQLCipher

Ouvrir la base de données

Généralement, cette méthode setKey est utilisée après l'ouverture de la base de données.

Partager comment chiffrer et déchiffrer la base de données SQLCipher
Remarque :

1 S'il y a FMDB dans le projet, il n'est pas recommandé d'introduire directement FMDB/SQLCipher La modification ne sera pas bénéfique pour le <.>bibliothèque de classes

Gestion unifiée et

mises à jour

. Nous pouvons directement importer le fichier de bibliothèque statique dans le projet puis configurer Xcode. Pour faire simple, les étapes sont les suivantes : (1) Dans le projet où vous avez FMDB, ajoutez le fichier .xcodeproj

(2) Modifiez deux configurations dans le paramètre de build de le projet L'un est d'autres drapeaux c, comme les autres drapeaux c dans l'image ci-dessusL'autre est d'autres drapeaux de lien, entrez les autres drapeaux lilnk dans l'image ci-dessus

Ensuite, la méthode setkey de FMDatabase peut être utilisée, après avoir ouvert la base de données, appelez cette méthode et le fichier de la base de données sera crypté.

说到怎么在不改变原来的FMDB源码,这里有一份拓展,供参考:

Partager comment chiffrer et déchiffrer la base de données SQLCipher

FMDB源码加密拓展

这个是我的demo可以到这里下载:pan.baidu.com/s/1o8fNHay

说明:

In most cases SQLCipher uses PBKDF2, a salted and iteratedkey derivation function, to obtain the encryption key. Alternately, anapplication can tell SQLCipher to use a specific binary key in blob notation(note that SQLCipher requires exactly 256 bits of key material), i.e.
PRAGMA key = "x&#39;2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99&#39;";
Once the key is set SQLCipher will automatically encryptall data in the database! Note that if you don&#39;t set a key then SQLCipher willoperate identically to a standard SQLite database.

一旦key被设置,SQLCipher将会自动加密数据库所有数据。

需要注意的是,在使用sqlite3_open打开或创建一个数据库,在对数据库做任何其它操作之前,都必须先使用sqlite3_key输入密码,否则会导致数据库操作失败,报出sqlite错误码SQLITE_NOTADB。

在sqlite3_open打开数据库成功,而且用sqlite3_key输入密码以后,就可以正常的对数据库进行增、删、改、查等操作了。

【相关推荐】

1. 免费mysql在线视频教程

2. MySQL最新手册教程

3. 数据库设计那些事

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn