我们在开发程序的时候,通常都会遇到加密的问题,数字化时代,加密的安全性是很高的.
简单地说,以前的纯调频/调幅的电波通讯完全是敞开式的,后来的莫尔斯电码也容易被猜解,
然而在数字化时代,我们传输的数据是0和1组成的二进制代码,除非你知道他的约定,否则,
用暴力猜解的方法是很难的.
在Visual Basic 中,加密通常应用在字符串,字符串加密常见的就三种方法:
ASCII代码移位加密;
XOR异或运算加密;
字表随机对调加密;
所谓ASCII移位就是将字符串逐个字符的ASCII编码顺推或者逆推若干位,如:
public function Encode(Byval str as string)as string
dim i as Long
if str = "" then exit function
encode = ""
for i = 0 to len(str)
encode = encode + chr(asc(mid(str,i,1))+5)
next i
end function
但是这种方法容易被暴力猜解,破解者只要提取一小段,逐个试过去,65535对计算机来说
简直是小菜一碟.
字表随机对调加密就是建立一张对照表(密码表),这跟莫尔斯电码差不多,加密的时候就完全把字母打乱,
但是很难应用于汉字,而且人工解密难度大,一旦变更子表很难熟练的解密.
public function Encode(byval str as string)as string
str = replace(str,"S","|")
str = replace(str,"A","S")
...
end function
XOR加密是数字化加密运用的好例子,加密的方式多种多样,而且密码可以很长,甚至很变态.
比较经典的加密如下:
Private Const strDefault As String = "h1d9y8x7" '设置默认密码
'XOR加密/解密是相同的
Public Function Dencrypt(byval strSource As String, Optional ByVal strKey As String = "") As String
Dim l As Long, strCrypt As String
Dim iValue As Integer, jValue As Integer
If Len(strKey) < 2 Then strKey = strDefault
Mid(strKey, 2, 1) = Asc(X)
For l = 1 To Len(strSource)
'第一个XOR值
iValue = Asc(Mid$(strSource, l, 1))
'第二个XOR值
jValue = Asc(Mid$(strKey, ((l Mod Len(strKey)) + 1), 1)) //这里会出现反复算法
'两个值XOR运算 比如asc("A") Xorasc("B") = 3
strCrypt = strCrypt + Chr(iValue Xor jValue)
Next l
Dencryption = strCrypt
End Function
我还曾经遇到过用随机数加密的 XOR算法,当时没注意分析,也没留下来.
XOR运算加密十分灵活,在大家多体会,此外XOR也可以应用于二进制文件,
然而对于图片啊视频啊什么的,我们通常只用文件头加密,那样运算快,消费比较好.