chenronting 发表于 2010-12-22 23:07:13

[未解决]求助关于如何加密SQL数据库(内详)

本帖最后由 chenronting 于 2010-12-30 21:37 编辑

6楼有提供另一种方法, 不过时好时坏, 很感谢 kingfirekkk 提示方法, 虽然不太好用,呵呵
我在论坛里找了半天, 想到另一种方法, 就是加密我要保存的内容,而不是数据库本身 , 也算是另一种解决吧

最近发现SQL数据库,操作简单实用, 不过好像没有加密的功能,不过还好发现了加密的方法 ,只是自己的Sql基础是真的太差了,不得已才来讨饶各位大神,请指教。这里给出提到SQL加密的一贴
1楼就有提到, 就在最下面。请大家帮帮忙, 衷心感谢,大家晚安。

一楼说看不懂,我这里再解释下吧, 就是把我下面发的帖子的连接里说的加密方法 ,改成AU3的格式的,最好呢,能弄个例子出来,我的基础有限,`可别把大家的热心都给弄冷了~呵呵, 谢谢先。

http://www.autoitx.com/forum.php?mod=viewthread&tid=1965&highlight=sql

guland 发表于 2010-12-23 08:27:24

你到底想问啥啊???? 是不是我的汉语没学好呀,我怎么没看明白呢

kingfirekkk 发表于 2010-12-23 11:02:49

楼主,你说的贴子里面已经说得很详细了哦,下面这一段落不就是吗?

打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。
sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。
int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db, "abc", 3);
sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常操作数据库,不需要再执行 sqlite3_key。
int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。
清空密钥为 sqlite3_rekey( db, NULL, 0)

chenronting 发表于 2010-12-23 18:24:38

回复 2# guland


    你没有看懂吗, 我是说 Sql这个数据库语言很好,就是没有加密的功能, 我在论坛里找到的加密的方法 ,不过用不来,按里面的用法, 都没有加密成功~不知道能不能帮下, 我承认, 我基础, 很差`

chenronting 发表于 2010-12-23 18:25:44

回复 3# kingfirekkk


    是的, 我都看到了, 不过我想问的是怎么用AU3语句来实现(使用),我用过_SQLite_Query。不知道你能帮我改一下吗。

kingfirekkk 发表于 2010-12-23 19:21:47

我也是菜鸟一个,从官网里面找了点资料,给你拼了一段代码:
第一步:复制下面的代码,并把它命名并保存;
第二步:下载System.Data.SQLite.dll这个文件,把它和上面的文件放在一块儿;
第三步:F5执行代码,然后你可以看到结果如下:(此时数据表已经加密,Key为:'andrew is happy!')
1        1        2        3       
2                5        6       
第四步:验证是否已经加密?....把6~9行,注释掉,让它不执行,这时你再执行F5时,发现结果如下:
--> Function: _SQLite_Query
--> Query:    Select oid,* From tblTest
--> Error:    file is encrypted or is not a database
即表示使用正常的步骤已经无法打开这个数据库了
具体的原理我也不是很明白,希望能够对你有用;

#include <SQLite.au3>
; don't include sqlite.dll.au3 !!!
_SQLite_Startup ("System.Data.SQLite.dll")
;~ ConsoleWrite(_SQLite_LibVersion() & @LF)
_SQLite_Open(@ScriptDir&"\test.db")
_SQLite_Exec(-1, "pragma key = 'andrew is happy!';" & _
"Create table if not exists tblTest (a,b int,c single not null);" & _
                "Insert into tblTest values ('1',2,3);" & _
                "Insert into tblTest values (Null,5,6);")
Local $row
_SQLite_Exec(-1,"Select oid,* From tblTest","_cb") ; _cb Will be called for each row
;~ ConsoleWrite($row & @LF)
_SQLite_Close()
_SQLite_Shutdown()

Func _cb($aRow)
    For $s In $aRow
      ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@CRLF)
    ; Return $SQLITE_ABORT ; Would Abort the process and trigger an @error in _SQLite_Exec()
EndFunc

kingfirekkk 发表于 2010-12-23 19:23:10

补上官方论坛里面的贴子:

http://www.autoitscript.com/forum/topic/112731-sqlite-with-password/page__p__789746__hl__sqlite3_key+__fromsearch__1#entry789746

chenronting 发表于 2010-12-23 19:46:09

回复 7# kingfirekkk


    谢谢啊, 官网里的真看不懂~唉, 太谢谢了, 感激之情, 实在是 溢于言表 啊

chenronting 发表于 2010-12-23 19:52:44

回复 6# kingfirekkk


    代码试用了, 成功加密了,不过其中的代码能跟我说下意思吗,新建的表我想自定义一下,他这个写的太集中了, 我分不开,哪些是新建表的代码 , 我要的数据库, 有四五个表呢,再次感谢你

kingfirekkk 发表于 2010-12-23 20:00:49

回复 9# chenronting
#include <SQLite.au3>
; don't include sqlite.dll.au3 !!!
_SQLite_Startup ("System.Data.SQLite.dll")    ;初始化DLL库文件;
;~ ConsoleWrite(_SQLite_LibVersion() & @LF)          ;显示SQLite版本
_SQLite_Open(@ScriptDir&"\test.db") ;打开数据库文件,此处可以自行定义数据库文件路径
_SQLite_Exec(-1, "pragma key = 'andrew is happy!';" & _   ;此行将key=后面的内容换成你自己需要的内容,即可修改密码了。
"Create table if not exists tblTest (a,b int,c single not null);" & _               ;如果不存在表tbltest,则新建一个表,表格内容为,A,B,C三栏,其中B为int类型,C为Single并不为空值
                "Insert into tblTest values ('1',2,3);" & _                                  ;往数据库中插入数据
                "Insert into tblTest values (Null,5,6);")                                     ;往数据库中插入数据
Local $row      ;定义$row,用于显示Row的内容
_SQLite_Exec(-1,"Select oid,* From tblTest","_cb") ;      ;选定表格,同时使用_CB这个UDF来显示整个表格内容            
;~ ConsoleWrite($row & @LF)
_SQLite_Close()      ;关闭数据库
_SQLite_Shutdown(); 解除SQLite.dll

Func _cb($aRow)   ;UDF _CB
    For $s In $aRow
      ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@CRLF)
    ; Return $SQLITE_ABORT ; Would Abort the process and trigger an @error in _SQLite_Exec()
EndFunc

chenronting 发表于 2010-12-23 20:16:17

回复 10# kingfirekkk


    加密成功, 就是在操作数据库的时候会出现!   SQLite.au3 Error
--> Function: _SQLite_Query
--> Query:    SELECT IDs FROM TestTable WHERE IDs = '1';
--> Error:    file is encrypted or is not a databasey大概意思好像是数据库是加密的, 或不是一个数据库文件。

chenronting 发表于 2010-12-23 20:17:31

回复 10# kingfirekkk


   是不是要在操作前,加一个解密的操作
我试过 sqlite3_key( db, "abc", 3);还是那个提示

chenronting 发表于 2010-12-23 20:28:46

回复 10# kingfirekkk


   我用那个AU3 里的 _cb 可以看到我写入的数据, 就是不知道在数据操作前要怎么解密数据库呢?
>运行:(3.3.6.1):D:\autoit3\autoit3.exe "C:\Documents and Settings\Administrator\桌面\SQL\SQL数据库操作.au3"   
1        1        asdfsadffdsdaf        asddddddddddddddddf       

kingfirekkk 发表于 2010-12-24 11:54:25

下面这一行就是加密语句,同时也是解密的
_SQLite_Exec(-1, "pragma key = 'andrew is happy!';" & _

chenronting 发表于 2010-12-24 17:57:00

回复 14# kingfirekkk


    非常感谢 ,我在读取那里加了这个成功了, 在写入那里加了这个好像有问题,呵呵 , 让我再试试, 谢谢你啊,热心人
页: [1] 2
查看完整版本: [未解决]求助关于如何加密SQL数据库(内详)