编写一个加密软件,要求将源文件按字节逐位倒排序加密法加密。
字节逐位倒排序加密法是以比特为单位的换位加密方法,用vb实现的具体算法是:
(1) 以二进制模式打开源文件;
(2) 从源文件第i位读取一个字节,假设为字母“a”,得到“a”的ascii值为65;
(3) 将65转换成八位二进制串为“01000001”;
(4) 将“01000001”按字节逐位倒排序得另一个八位二进制串“10000010”;
(5) 将“10000010”转换成十进制再写回源文件第i位置,完成一个字节的加密;
(6) 重复(2)、(3)、(4)和(5),直到所有字节加密结束。
为了使程序模块化,我们用函数过程bytetobin完成将字节型数据转换成二进制串(其实质就是将十进制数转换成八位二进制串);用函数过程bintobyte将二进制串转换成字节型数据(实质是将八位二进制串转换成十进制数):用函数过程reverse将八位二进制串逐位倒排序。具体程序如下:
function bytetobin(m as byte) as string ' 将字节型数据转换成八位二进制字符串
dim c$
c$ = \"\"
do while m <> 0
r = m mod 2
m = m \\ 2
c$ = r & c$
loop
c$ = right(\"00000000\" & c$, 8)
bytetobin = c$
end function
function reverse(m as string) as string ' 将八位二进制字符串颠倒顺序
dim i%, x$
x = \"\"
for i = 1 to 8
x = mid(m, i, 1) & x
next i
reverse = x
end function
function bintobyte(m as string) as byte ' 将八位二进制串转换成十进制
dim x as string * 1, y%, z%
z = 0
for i = 1 to 8
x = mid(m, i, 1)
y = x * 2 ^ (8 - i)
z = z + y
next i
bintobyte = z
end function
private sub command1_click()
dim x as byte, i%, fname$
fname = inputbox(\"请输入要加密的文件名!注意加上路径名:\")
if dir(fname) = \"\" then
msgbox \"文件不存在!\"
exit sub
end if
open fname for binary as #1 ' 以二进制访问模式打开待加密文件
for i = 1 to lof(1) ' lof函数是求文件长度的内部函数
get #1, i, x ' 取出第i个字节
x = bintobyte(reverse(bytetobin(x))) ' 这里调用了三个自定义函数
put #1, i, x ' 将加密后的这个字节写回到文件原位置
next i
close
msgbox \"任务完成!\"
end sub
加密狗原理
加密狗通过2种加密方式对软件进行保护。
1、外壳加密:对编译后的EXE或DLL文件进行加壳保护,防止文件被反编译。软件在运行的过程中,会时时的和加密狗进行通讯和数据传输,一旦通讯中断或数据传输中的数据存在错误,就会禁止软件运行。
2、API函数加密:加密狗提供API函数,利用函数可以对加密狗内的存储空间进行读和写操作,可以保护一些防止外泄的重要数据。
利用API可以实现很多功能,比如:
a:将电脑硬件指纹(CPU ID、硬盘ID、主板ID、MAC地址、BIOS序列号等)写入加密狗中,实现软件和电脑的唯一绑定。
b:将数据库的表名、字段名等写入加密狗中,实现程序代码中对数据库表和字段操作时,以变量形式表现表和字段,保护数据库。
c、将一个整数写入加密狗中,来实现B/S架构的网站,限制注册用户数量。
以上只是一些简单的应用案例,更多案例及解决方案,可以登录“上海旺财信息”官方网站查找。
加密狗统一服务热线:400 600 9103
因篇幅问题不能全部显示,请点此查看更多更全内容