注册 登录
编程论坛 VFP论坛

用代码给文件夹加密码,有解吗?

zhousr 发布于 2021-04-16 20:50, 3482 次点击
系统中有个文件夹里的内容不想让人轻易看到,所有想加个密码,只有密码正确,才能打开这个文件夹。问了度娘,度娘好像也不知道。本坛有高人,肯定有人知道,能否赐教?!!
30 回复
#2
radiofan2021-04-16 21:53
肯定可以加密呀!不管是数据记录还是文件
#3
zhousr2021-04-16 22:34
以下是引用radiofan在2021-4-16 21:53:01的发言:

肯定可以加密呀!不管是数据记录还是文件

请指点!加密文件夹,最好直接上代码
#4
sdta2021-04-16 22:41
隐藏文件夹就可以了
#5
apull2021-04-16 22:53
可以藏到垃圾箱里,清空垃圾箱也不会被删除。
cmd进入recycled文件夹下建一个目录tt,运行start d:\recycled\tt,进入文件夹操作。
#6
zhousr2021-04-16 23:16
以下是引用apull在2021-4-16 22:53:18的发言:

可以藏到垃圾箱里,清空垃圾箱也不会被删除。
cmd进入recycled文件夹下建一个目录tt,运行start d:\recycled\tt,进入文件夹操作。

是个好思路,待我慢慢研究一下怎么实现。藏到垃圾箱里,一般人还真想不到
#7
apull2021-04-17 00:44
从XP时代就在垃圾箱放小片子了,win7之后垃圾箱变成了回收站,也就是recycle或者$recycle.BIN了,如果没有recycled则要手动建立了。
建立一个recycled的文件夹,里面新建一个desktop.ini文件,输入
[.ShellClassInfo]
CLSID={645FF040-5081-101B-9F08-00AA002F954E}
保存后,给这个recycled文件夹用attrib +a +s +h +r recycled加属性就能变成垃圾箱了

可以用attrib -a -s -h -r recycled对垃圾箱去属性,会变成一个正常的文件夹,操作完成后再加属性。
这个垃圾箱里的东西有些软件能看到的,比如winrar设置显示文件夹树后就能看得到。
#8
zhousr2021-04-17 01:10
apull,非常感谢!!!
#9
xvdongcn2021-04-17 09:27
数据及文件加密肯定是没有问题,问题的关键是你的加密算法也要加密,如果你的代码很容易被反编译,任何加密都可以破解,回到加密的本质,数据加密后我们自己对数据读取的时候需要解密,还原成我们最初录入数据的样子,这个解密过程可以有两种思路,一种思路是固定解密算法,还有一种稍微高级点的是动态算法,例如根据时间或解密次数,对数据进行二次加密,包裹数据的加密层如果被触发,可以留下记录,如果是非法触发,可以将密钥销毁,如果想看最原始的记录,需要超级秘钥等等....

本质是防范数据泄露,保护用户数字资产,可以根据用户对数据保密的级别做相应的对策,如果对数据保密性要求极高,可以考虑硬件加密,分布式存储,非法触及原始加密文档后,非法用户也只能得到加密文件的一部分,并且整个秘钥失效,只有客户保险柜里的超级秘钥才能查看已经被非法触及的原始数据。

当然这都是初级的加密措施,更为高级并且高效的加密措施也有很多,技术问题都好解决,最不好解决的是内部管理问题,用户管理制度健全,人员培训到位,就算是很初级的加密,也不会出现数据泄露的问题。

防范一些初级的数据泄露手段也是要考虑的范围,比如USB接口的监控,屏录软件的监控等等....这些技术手段都好解决,如果用户内部管理松散,拿个手机拍屏幕,就是再神仙的算法也解决不了内盗问题。
#10
吹水佬2021-04-17 10:03
也可试试 Windows API

加密函数:
      BOOL EncryptFile(
          LPCTSTR lpFileName
      );

解密函数:
      BOOL DecryptFile(
          LPCTSTR lpFileName,
          DWORD dwReserved       // 保留参数,必须为0
      );

库文件:Advapi32.dll

参数lpFileName可以是文件名或目录名,如果是目录名,在该目录下创建的文件都将被自动加密/解密。函数执行成功返回非零,失败返回零。

用户加密文件后,自己仍然可以随意查看(不需要先解密),但具有相同权限级别的其他用户不能查看,当他们打开你加过密的文件时,将得到“拒绝访问”的警告信息。要注意的是,比你权限级别高的用户(超级管理员),仍然可以随意查看你的文件。
#11
zhousr2021-04-17 14:15
谢谢 xvdongcn、谢谢 吹版!!!
#12
zhousr2021-04-19 22:56
谢谢各位大咖!!!
吹版:说实话,Windows API我没用过,目前还真不知道该怎么用。留着,等空下来我再好好学习一下。谢谢您!
SDTA、apull两位版主,都提到了隐藏的思路,我正在试。按照apull版主提供的代码,我建了个测试文件夹,很好用,一切都如相像中一样。但我把代码移植到我的程序中时,出现了一点问题。因为代码分散在不同的过程中,比较杂乱,所以也没办法完整上传代码。简单地说,问题出在目录是否存在的判断上:

我在程序外写:
?DIRECTORY("c:\recycled"),返回.F.

在程序里有:
if directory("C:\recycled")
qqu="AA"  &&没什么意义
ELSE
MD C:\recycled
endif

程序运行时,到 MD C:\recycled 这句提示 C:\recycled 已经存在。已经存在,不是应该执行 qqu="AA" 的吗,怎么跳到 ELSE 后面来了?

从整个程序看,在退出前,C:\recycled 已经改成正常文件夹的属性,并且已经删除。
删除的代码是:
run/n2 attrib -a -s -h -r C:\recycled
loFSO = Createobject("Scripting.FileSystemObject")
loFSO.DeleteFolder("C:\recycled")

不知程序运行时为何还会提示 C:\recycled 已经存在?

请赐教,谢谢!!!



#13
sdta2021-04-19 23:21
RD | RMDIR 命令
从磁盘上删除一个目录或文件夹。

if directory("C:\recycled") = .F.
    MD C:\recycled
endif
qqu="AA"  &&没什么意义
#14
zhousr2021-04-19 23:27
以下是引用sdta在2021-4-19 23:21:10的发言:

RD | RMDIR 命令
从磁盘上删除一个目录或文件夹。

if directory("C:\recycled") = .F.
    MD C:\recycled
endif
qqu="AA"  &&没什么意义

还是“已经存在”!
到底在哪个角落里做了个“已经存在”的标记呢??
#15
sdta2021-04-19 23:37
recycled 应该是回收站的 NAME,换个名称试试
#16
zhousr2021-04-19 23:39
试了 RD c:\recycled,提示:
不能存取文件80004005:unspecified error
#17
zhousr2021-04-19 23:54
以下是引用sdta在2021-4-19 23:37:27的发言:

recycled 应该是回收站的 NAME,换个名称试试


大神!!!果然是回收站名,果然是肯定存在的!改成recycled2后,没问题了。
不过,还有个问题:RD好像是删除空文件夹的,我这个recycled2里有东西,只删了recycled2下面的文件夹,recycled2还在,没删彻底。
#18
zhousr2021-04-20 00:01
留个空文件夹在那也不在乎了,反正里面的东西清空就好了
如果知道如何彻底删除,当然也是极好的
#19
sdta2021-04-20 00:14
以下是引用zhousr在2021-4-20 00:01:19的发言:

留个空文件夹在那也不在乎了,反正里面的东西清空就好了
如果知道如何彻底删除,当然也是极好的


loFSO = Createobject("Scripting.FileSystemObject")
loFSO.DeleteFolder("C:\recycled2")
这个不行吗
#20
sdta2021-04-20 00:15
下面的代码是本坛前任版主TONGDENG的大作
SET DEFAULT TO "D:\HS"
CLEAR ALL
CLEAR
DELDIR("A", .F.)
CLEAR ALL
INKEY(1)
DELETE FILE *.BAT
RETURN

*-----------------------------------------------------------
* 參數:tcDir -- 當前默認路徑下的文件夾名,也可以用絕對路徑
*       tlQuestion -- 是否需要確認,默認為要
*-----------------------------------------------------------
PROCEDURE DELDIR(TCDIR, TLQUESTION)
IF (PCOUNT() < 2) .OR. (VARTYPE(TLQUESTION) != "L")
   TLQUESTION = .T.
ENDIF
IF TLQUESTION .AND. (MESSAGEBOX("您确认删除文件夹" + TCDIR + "中的一切内容吗?", 32 + 4 + 256) != 6)
   RETURN
ENDIF
STRTOFILE("RD &tcDir /S /Q", "DELDIR.BAT")
RUN /N7 DELDIR.BAT
ENDPROC
#21
zhousr2021-04-20 08:13
谢谢sdtaa!
loFSO = Createobject("Scripting.FileSystemObject")
loFSO.DeleteFolder("C:\recycled2")
不行
#22
sdta2021-04-20 08:18
空文件夹可以用 RD 命令删除
#23
radiofan2021-04-20 08:20
都是高手。不过,vfp更侧重于数据管理…… 再者,不管你程序如何加密,放到调试器中还不是啥都看到了
#24
zhousr2021-04-20 10:44
以下是引用sdta在2021-4-20 08:18:14的发言:

空文件夹可以用 RD 命令删除

晕死
#25
吹水佬2021-04-20 14:52
以下是引用zhousr在2021-4-20 08:13:16的发言:

谢谢sdtaa!
loFSO = Createobject("Scripting.FileSystemObject")
loFSO.DeleteFolder("C:\recycled2")
不行

正常情况下,自己随便建个文件夹,win10测试是可行的。
#26
schtg2021-04-20 15:33
加密文件夹,最后有可能自己哭笑不得哈^_^
#27
sdta2021-04-20 16:10
设置隐藏不一定要加密,可以设置为系统文件隐藏
#28
zhousr2021-04-21 00:17
以下是引用吹水佬在2021-4-20 14:52:02的发言:


正常情况下,自己随便建个文件夹,win10测试是可行的。

好的,我再试试
#29
zhousr2021-04-21 00:37
现在没用加密改用调用winrar带密压缩,需要用的时候再解压,用后又重新压缩回去。同时设置文件夹的系统、隐藏属性,还是用recycled文件名,伪装成回收站。因为光设置属性,有心人还是能看到隐藏的文件。现在两种方法结合,他即使看到,也是看到一个自定义后缀的文件,比如bkko.zsr。即使猜到可能是RAR文件,把后缀改为RAR,解压时也要用到压缩时设定的密码。
也只是想方设法为难一下一般人而已,对高手来说形同虚设。
谢谢所有热心提供建议、帮助的朋友!!!

#30
whinda2021-05-04 11:59
跟流氓软件学的,把你的内容保存到一个打不开也删不掉的文件夹就可以了。
建立,md c:\mydir..\
操作,copy d:\*.txt c:\mydir..\
访问,start c:\mydir..\
文件夹加密本身是需要驱动级后台服务支持才行,更便捷方式加密压缩成包。
#31
zhousr2021-05-04 12:34
以下是引用whinda在2021-5-4 11:59:04的发言:

跟流氓软件学的,把你的内容保存到一个打不开也删不掉的文件夹就可以了。
建立,md c:\mydir..\
操作,copy d:\*.txt c:\mydir..\
访问,start c:\mydir..\
文件夹加密本身是需要驱动级后台服务支持才行,更便捷方式加密压缩成包。


谢谢你!!!
1