Page 1 sur 1
[R] Utilisation de System.Data.SQLite.dll
Posté : ven. 31 mars 2023 14:39
par jpascal
Bonjour,
Je souhaite gérer une base de données chiffrée.
Pour cela, j'ai lu l'explication de jchd qui indique comment faire :
https://www.autoitscript.com/forum/topi ... sqlitedll/
J'ai un problème dès le début du code :
J'ai téléchargé toutes ces versions sur
https://system.data.sqlite.org/index.ht ... loads.wiki :
- sqlite-netFx46-binary-bundle-x64-2015-1.0.117.0
- sqlite-netFx46-binary-x64-2015-1.0.117.0
- sqlite-netFx46-static-binary-bundle-x64-2015-1.0.117.0
- sqlite-netFx46-static-binary-x64-2015-1.0.117.0
- sqlite-netStandard21-binary-1.0.117.0
Les fichiers ont été décompressés dans le même dossier que le script.
Aucun n'est reconnu (la version affiche 0).
Re: [..] Utilisation de System.Data.SQLite.dll
Posté : ven. 31 mars 2023 16:57
par jchd
Le support du chiffrement a été abandonné il y a longtemps.
A ma connaissance, la dernière version le supportant est System.Data.SQLite.dll v3.8.10.2 que je joins ici (X86).
Re: [..] Utilisation de System.Data.SQLite.dll
Posté : lun. 03 avr. 2023 12:08
par jpascal
Merci pour le fichier.

Cependant je ne peux pas le tester.
En effet j'ai toujours le numéro de version à 0 comme s'il ne détectait pas la dll.
Mon retour console :
Version 0
"C:\Dev\AutoIt\Tests\SQLite\SQLite encryption.au3" (16) : ==> Subscript used on non-accessible variable.:
ConsoleWrite($row[1] & @LF)
ConsoleWrite($row^ ERROR
Mon dossier contient uniquement le script suivant ainsi que la DLL que vous avez postée :
#include <SQLite.au3> ; don't include sqlite.dll.au3 !!!_SQLite_Startup("System.Data.SQLite.dll")ConsoleWrite('Version ' & _SQLite_LibVersion() & @LF)Local $path = @ScriptDir & "\mydb.sql"Local $row; using encryption_SQLite_Open($path)_SQLite_Exec(-1, "pragma key = 'Radu is happy!';create table if not exists test (id integer, val text);" & _
"insert into test values (1, 'abc');")_SQLite_QuerySingleRow(-1, "select * from test;", $row)ConsoleWrite($row[1] & @LF)_SQLite_Close(-1); not using encryption over the encrypted DB gives a failure_SQLite_Open($path)_SQLite_QuerySingleRow(-1, "select * from test;", $row)ConsoleWrite(_SQLite_ErrMsg(-1) & @LF)_SQLite_Close(-1); changing back to no encryption_SQLite_Open($path)_SQLite_Exec(-1, "pragma key = 'Radu is happy!'")_SQLite_Exec(-1, "pragma rekey = ''")_SQLite_QuerySingleRow(-1, "select * from test;", $row)ConsoleWrite($row[1] & @LF)_SQLite_Close(-1)_SQLite_Shutdown()
Re: [..] Utilisation de System.Data.SQLite.dll
Posté : lun. 03 avr. 2023 15:48
par jchd
Et comme ça ?
Code : Tout sélectionner
#include <SQLite.au3> ; don't include sqlite.dll.au3 !!!
ConsoleWrite(_SQLite_Startup(@ScriptDir & "\System.Data.SQLite.dll") & @LF)
ConsoleWrite('Version ' & _SQLite_LibVersion() & @LF)
La DLL est en 32 bit, donc script en X86 aussi.
Re: [..] Utilisation de System.Data.SQLite.dll
Posté : ven. 21 avr. 2023 12:52
par jpascal
Au temps pour moi, je n'avais pas noté cette information ô combien importante.
En ajoutant la ligne #AutoIt3Wrapper_UseX64=N
, le code fonctionne parfaitement.
Dommage que le développement ait été stoppé.
Encore merci pour la solution.
Re: [R] Utilisation de System.Data.SQLite.dll
Posté : ven. 21 avr. 2023 13:14
par jchd
Le développement n'est absolument pas stoppé, bien au contraire.
L'équipe SQLite propose l'acquisition d'une licence pour une version avec chiffrement (SEE), destinée à de "riches" corporates. Ils ont supprimé les "hooks" du code permettant d'implémenter le [dé]chiffrement pour cette raison.
Sinon il existe des dérivations libres de SQLite avec chiffrement, telle SQLCipher et d'autres.
Re: [R] Utilisation de System.Data.SQLite.dll
Posté : lun. 03 juil. 2023 11:17
par jpascal
J'ai compilé SQLCipher en version 3.41.2
L'exécutable obtenu semble fonctionner correctement. En revanche, l'utilisation de la DLL dans AutoIt ne crée pas de base chiffrée.
Output :
Version 3.41.2
abc
not an error
abc
A noter que j'ai obtenu une erreur lors de la compilation :
LINK : sqlite3.exe introuvable ou non généré par la dernière édition de liens incrémentielle ; édition de liens complète en cours
Je cherche...

Re: [R] Utilisation de System.Data.SQLite.dll
Posté : lun. 03 juil. 2023 17:10
par jchd
Un petit exemple de code AutoIt qui ne procède pas au chiffrement serait utile pour avancer !
Re: [R] Utilisation de System.Data.SQLite.dll
Posté : lun. 03 juil. 2023 17:13
par jchd
sqlite3.exe est un exécutable complètement distinct de la bibliothèque, l'utilitaire en ligne de commande. Ca doit être une cible secondaire du makefile de SQLCipher (que je n'ai jamais utilisé) utilisant la bibliothèque pour offrir le chiffrement.
Re: [R] Utilisation de System.Data.SQLite.dll
Posté : jeu. 13 juil. 2023 10:28
par jpascal
Au temps pour moi, je pensais l'avoir posté en entier dans mon premier message.
Code : Tout sélectionner
#include <SQLite.au3> ; don't include sqlite.dll.au3 !!!
_SQLite_Startup("sqlite3.dll")
ConsoleWrite('Version ' & _SQLite_LibVersion() & @LF)
Local $path = @ScriptDir & "\mydb.sqlite"
Local $row
; using encryption
_SQLite_Open($path)
_SQLite_Exec(-1, "pragma key = 'Radu is happy!';create table if not exists test (id integer, val text);" & _
"insert into test values (1, 'abc');")
_SQLite_QuerySingleRow(-1, "select * from test;", $row)
ConsoleWrite($row[1] & @LF)
_SQLite_Close(-1)
; not using encryption over the encrypted DB gives a failure
_SQLite_Open($path)
_SQLite_QuerySingleRow(-1, "select * from test;", $row)
ConsoleWrite(_SQLite_ErrMsg(-1) & @LF)
ConsoleWrite($row[1] & @LF)
_SQLite_Close(-1)
; changing back to no encryption
_SQLite_Open($path)
_SQLite_Exec(-1, "pragma key = 'Radu is happy!'")
_SQLite_Exec(-1, "pragma rekey = ''")
_SQLite_QuerySingleRow(-1, "select * from test;", $row)
ConsoleWrite($row[1] & @LF)
_SQLite_Close(-1)
_SQLite_Shutdown()
Et le retour console :
Version 3.41.2
abc
not an error
abc
abc
Re: [R] Utilisation de System.Data.SQLite.dll
Posté : jeu. 13 juil. 2023 19:10
par jchd
Il faudrait déjà être certain que c'est bien la dll de SQLCipher qui a été chargée, par exemple en patchant le source pour afficher 3-41-2 et non 3.41.2 comme la dll SQLite. Il serait aussi préférable de nommer la dll autrement, par exemple sqlcipher3.dll