|
这是我在大学时写的一个异或vb加密解密代码
异或加密解密是密码学里最简单的一种.
这两个模块是我的一个程序的一部分:
'加密函数(异或加密是可逆的,就是可以解密)
'strA为要加密或解密的字符串
'keyA为加密锁
'返回值是一个byte类型的数组即解密或加密后的数据
Function Encryption(strA() As Byte, keyA As Single) As Byte()
Dim bytA() As Byte
Dim i As Integer
Dim intA As Integer
Dim bytkey As Byte
bytA() = strA()
intA = Int(Rnd(keyA) * 255)
For i = LBound(bytA) To UBound(bytA)
bytkey = intA
bytA(i) = bytA(i) Xor bytkey '用异或加密
intA = Int(Rnd * 255) '随机数的产生,为下面提供加密数
Next i
Encryption = bytA()
End Function
Public Function GetKey(password() As Byte) As Single
Dim sngkey As Single
sngkey = password(0)
If sngkey > 0 Then '因为加密算法是用随机数加密的,所以要把密码匙定义为负数
sngkey = -sngkey
End If
GetKey = sngkey
End Function
'把密码明文转换成密码密文,或把密码密码转换成密码明文
'参数password为密码的明文或密文
'参数flag为加密或解密过程的标志,true时为加密,flase时为解密
'返回值是密码的明文或者密文
Public Function EncryptionPW(password() As Byte, flag As Boolean) As Byte()
Dim i As Integer
Dim ch As Byte
Dim l As Integer
Dim bytA() As Byte
If flag Then '如果flag为true那么把密码转换成明码
bytA() = password()
l = UBound(bytA)
For i = LBound(bytA) To UBound(bytA)
ch = bytA(i)
If Chr(ch) >= "A" And Chr(ch) <= "Z" Then
bytA(i) = (((ch + l) - Asc("A")) Mod 26) + Asc("A")
ElseIf Chr(ch) >= "a" And Chr(ch) <= "z" Then
bytA(i) = (((ch + l) - Asc("a")) Mod 26) + Asc("a")
ElseIf Chr(ch) >= "0" And Chr(ch) <= "9" Then
bytA(i) = (((ch + l) - Asc("0")) Mod 10) + Asc("0")
End If
Next i
bytA() = Encryption(bytA, -1)
EncryptionPW = bytA()
Else '如果flag为false那么把明码转换成密码
bytA() = password()
bytA() = Encryption(bytA, -1)
l = UBound(bytA)
For i = LBound(bytA) To UBound(bytA)
ch = bytA(i)
If Chr(ch) >= "A" And Chr(ch) <= "Z" Then
bytA(i) = (((ch + 26 * l - l) - Asc("A")) Mod 26) + Asc("A")
ElseIf Chr(ch) >= "a" And Chr(ch) <= "z" Then
bytA(i) = (((ch + 26 * l - l) - Asc("a")) Mod 26) + Asc("a")
ElseIf Chr(ch) >= "0" And Chr(ch) <= "9" Then
bytA(i) = (((ch + 10 * l - l) - Asc("0")) Mod 10) + Asc("0")
End If
Next i
EncryptionPW = bytA()
End If
End Function |
|