找回密码
 加入
搜索
查看: 7048|回复: 18

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

  [复制链接]
发表于 2010-12-22 23:07:13 | 显示全部楼层 |阅读模式
本帖最后由 chenronting 于 2010-12-30 21:37 编辑

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


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

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

http://www.autoitx.com/forum.php ... 5&highlight=sql
发表于 2010-12-23 08:27:24 | 显示全部楼层
你到底想问啥啊???? 是不是我的汉语没学好呀,我怎么没看明白呢
发表于 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)
 楼主| 发表于 2010-12-23 18:24:38 | 显示全部楼层
回复 2# guland


    你没有看懂吗, 我是说 Sql这个数据库语言很好,就是没有加密的功能, 我在论坛里找到的加密的方法 ,不过用不来,按里面的用法, 都没有加密成功~不知道能不能帮下, 我承认, 我基础, 很差`
 楼主| 发表于 2010-12-23 18:25:44 | 显示全部楼层
回复 3# kingfirekkk


    是的, 我都看到了, 不过我想问的是怎么用AU3语句来实现(使用),我用过_SQLite_Query。不知道你能帮我改一下吗。
发表于 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[1] & @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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-12-23 19:23:10 | 显示全部楼层
补上官方论坛里面的贴子:

http://www.autoitscript.com/foru ... arch__1#entry789746
 楼主| 发表于 2010-12-23 19:46:09 | 显示全部楼层
回复 7# kingfirekkk


    谢谢啊, 官网里的真看不懂~唉, 太谢谢了, 感激之情, 实在是 溢于言表 啊
 楼主| 发表于 2010-12-23 19:52:44 | 显示全部楼层
回复 6# 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[1] & @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
 楼主| 发表于 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
大概意思好像是数据库是加密的, 或不是一个数据库文件。
 楼主| 发表于 2010-12-23 20:17:31 | 显示全部楼层
回复 10# kingfirekkk


   是不是要在操作前,加一个解密的操作
我试过 sqlite3_key( db, "abc", 3);  还是那个提示
 楼主| 发表于 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       
发表于 2010-12-24 11:54:25 | 显示全部楼层
下面这一行就是加密语句,同时也是解密的
_SQLite_Exec(-1, "pragma key = 'andrew is happy!';" & _ 
 楼主| 发表于 2010-12-24 17:57:00 | 显示全部楼层
回复 14# kingfirekkk


    非常感谢 ,我在读取那里加了这个成功了, 在写入那里加了这个好像有问题,呵呵 , 让我再试试, 谢谢你啊,热心人
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 14:34 , Processed in 0.106305 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表