小友做一个项目,有近千张图片,全部导入到D中,工作量庞大,而且CAST表会很大,所以想采用外链素材的方式,可有担心图片外泄。问有什么好办法。若论素材加密,方法有很多种,对于LINGO不是很熟练的朋友来说,最方便的莫过于BUDAPI提供的几个加解密命令。
- baEncryptFile 文件加解密函数,本函数使用"或"运算对文件进行加密。解密的时候,用同样的密码再执行一遍本函数,这样就可以使文件恢复本来面目。
- baEncryptText加密一个字符串.
- baDecryptText函数将一个被baEncryptText函数加密的字符串解密。
实施过程:
一 素材加密
首先我们利用baEncryptFile 函数对素材加密。
函数语法格式:
baEncryptFile( FileName , Key )
参数类型:String(字符型),String
FileName(文件名):指代要被加密或解密的文件名
Key(密钥):指代用来解密的密码字串
示例代码:
on encrypt
tfolder=the moviepath&"image\" --这是即将要加密的素材存放路径
tfile= baFindFirstFile(tfolder, "*.jpg")--查找符合指定格式的第一个文件,这里的以JPG为例
--下面的循环体是查找所有指定格式的文件,并且加密
repeat while tfile<>"" then--如果找到了指定格式的文件
baEncryptFile( tfile , "123" )--加密文件,假定加密密码为123
tfile=baFindNextFile()--查找下一个文件
end repeat
alert "素材加密完成"--提示加密完成
end
注:对文件实施加密前,最好要将原始文件备份一份。
二 加密文件的调用
被加密了的文件,D就无法直接导入或者调用了,必须先解密后才可以使用。
on DecryptFile
tfile=baSysFolder("temp")--获取系统临时文件夹
baCopyFile( the moviepath&"image\02.jpg" ,tfile&"02.jpg" , "Always" )--加已经加密了的文件拷贝到系统临时文件夹,这里以当前运行路径下的IMAGE文件夹下的02.jpg为例
baEncryptFile( tfile&"02.jpg" , "123")--解密文件,注意,这里是对拷贝到临时文件夹下的文件进行解密
member(100).importFileInto(tfile&"02.jpg" )--导入文件,这里导入的也是临时文件夹下的文件
baDeleteFile(tfile&"02.jpg" )--删除已经解密的文件
end
通过这个过程,文件已经导入到CAST里面的,具体这个演员怎么使用,就看程序的实际需求了。
有几点需要对初学者解释一下:
1 文件不要在原加密文件上做解密,一定要使用文件的副本进行解密导入,以防意外情况下,素材出错,比如正在解密的时候,程序意外终止。还有,很多程序是以光盘发布的,这时候是没法在原始位置解密的。
2 文件副本的存放,这个放在了系统的临时文件夹,你可以根据自己的实际情况选择,不过还是建议放在临时文件夹。
3 对解密后的文件一定要及时删除。
三 拓展
1 文件解密的代码部分是随你程序一起发布出去的,我们的解密过程使用了明文密码,也就是123这个密码,你可以尝试使用baDecryptText和baEncryptText组合,弄个密文密码。因为用某些二进制工具或调试工具,纯字符串的工具很容易破解。
比如用 baDecryptText("_OW\````",numtochar(21+46))代替解密密码,相信你一定可以做的比这个复杂。
2 你可以用改名函数把你的文件除了加密外,改成另外的文件名和扩展名,当然文件名也可以用baDecryptText和baEncryptText组合
最后提示一下,大文件和视频就别用这个方法了,一是拷贝和解密的速度和文件大小有关,二是视频解密后还是在外面存放,无法导入到D里面,不起作用。
素材保护有很多种方式,本人只是个半吊子,在这里做个引玉的砖头,请大家多多赐教。不过连微软都没办法的版权保护,足以证明,这东西没有绝对的安全,只是看你的软件能有多大的利润。