发布网友 发布时间:2022-10-30 20:16
共1个回答
热心网友 时间:2023-10-12 14:37
到上一节为止,我们基本实现了内容的分类与管理,至此,我们可以用这个小软件来记录一些内容了。
就目前的内容管理功能来说,对我而言基本够用了,再往下无非就是Rtf编辑器、Tag标签、内容查询等细化的功能,这些都属于锦上添花的功能,可以在后续的开发中不断完善。
我更关心的还是安全性的问题,包括两方面:一是访问安全,二是存储安全。
访问安全有两点:
1进入程序需要口令,只有口令验证通过才能进入。这种方式可以阻挡小白用户误点程序而看到内容。
2数据库内容加密。比如任何人用SqliteStudio,就能够打开sqlite数据库,如果数据库文件被窃取,窃取者就可以通过查询数据库的方式获取文件内容。所以,在保存时需要对数据库进行编码,这样窃取者即便获得了数据库文件,也只能看到一堆的乱码,无法查阅到真实的数据。
存储安全则主要就是数据库文件的备份。最好的方式是可以将数据库文件自动同步到云盘,如百度云盘,异地备份,受众群也较广。不过考虑到这个系列是入门教程,对第三方接口这类的内容不打算过多深入了,以后有机会可以专门单独开一个系列讲。这里我们就选择相对简单的局域网网络备份的方式来实现。
当然天下没有绝对的安全。理论上,只要是软件,任何加密手段都有可能被破解。登录口令可以爆破撞库,数据库内容可以对程序进行反编译,得到解码算法,然后再来还原。但是无论什么事我们讲的都是一个概率,这种情况发生的概率是:你的电脑被黑+黑客在你的电脑中注意到了这个程序+黑客有兴趣研究这个程序+黑客懂得破解的方法,这4种情况的概率组合比起内容直接暴露给第三方,我宁愿相信自己。
好,那我们整理下接下来要实现的内容:
其中数据库内容其实我们已经在上一节实现了。教程中我用了最简单的Url编码形式,只是为了能够保存到数据库中。正常来说,比较常规的方式是用base64编码,有人说这破解起来太不是容易了,别人只要base64解码不就好了。其实这部分是可以自由发挥的,比如编码后对字符进行变换,a->b,b->c...z->a,解码时再做逆变换,或者你只针对特定字符做特定替换,然后再做一遍base64编码,当然你也可以使用RSA等等,只要你能想到的并且能够做逆向还原就好。对方想破解,只能反编译你的程序代码。一旦你的程序代码被反编译,任何算法也都是徒劳的,除非你不做内容还原。关于程序破解与反破解,这部分内容超出本系列教程的范围了,以后有机会单独开系列讲,这里就不详细展开了。
剩下两个功能,无论是口令验证功能,还是数据库文件备份功能,都涉及到一个程序参数保存的问题,我们需要把正确的口令值、数据库文件保存的路径保存到文件或数据库中,这些程序参数我们需要统一管理。
不仅是私人日记这个产品,基本上所有软件产品都需要提供类似的程序参数设定,这些都是为了用户的个性化设置,这也是软件产品和软件项目的核心差别所在:软件项目很多都是程序中指定的值,开发者一是为了开发便利,二是防止复制给其他用户使用,而软件产品则需要尽可能的提供程序参数给用户进行设置,以便可以满足更多的用户需求。
由于我们已经使用了sqlite数据库,那么我们就采用数据库保存的方案。
具体操作如下:
简单说下BAL.Setting,类中我们定义了一个静态变量htValues,这个哈希表保存了所有的程序参数。之所以增加了这个内存变量,就是为了提高效率,不需要每次使用都从数据库读取。更新时,会把新的值同时写入内存和数据库中。
经过以上的代码,我们就完成了程序参数的架构搭建,我们在MainForm中加入测试代码:
运行到断点出后,我们发现pwd值为刚刚写入的123,符合我们的预期。
下一节,我们将实现口令登录。
----------------------------------------------------
私人日记可以获取Gitee的链接;
sqlitestudio 可以获取sqlitestudio的链接;
菜鸟 可以获取菜鸟教程链接;