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 :
Au temps pour moi, je n'avais pas noté cette information ô combien importante.
En ajoutant la ligne #AutoIt3Wrapper_UseX64=N, le code fonctionne parfaitement.
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
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
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
#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()
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
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.