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<🎜. >Il s'agit du module statique de chiffrement SQLCipher ;Deuxièmement, configurez Xcode
Remarque :
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源码,这里有一份拓展,供参考:
这个是我的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'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'"; Once the key is set SQLCipher will automatically encryptall data in the database! Note that if you don'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输入密码以后,就可以正常的对数据库进行增、删、改、查等操作了。
【相关推荐】
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!