盼望 发表于 2006-1-10 12:06

我也来个加密与解密

这是我在大学时写的一个异或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

hjack 发表于 2006-1-10 13:16

不错.

加分鼓励..希望继续支持本版.

盼望 发表于 2006-1-10 18:12

thx

powerwind 发表于 2006-1-10 19:05

楼主抢先一步了,我用VB.NET写的还没贴上来呢!

盼望 发表于 2006-1-10 19:20

原帖由 powerwind 于 2006-1-10 19:05 发表
楼主抢先一步了,我用VB.NET写的还没贴上来呢!


那贴出来大家参考

wool王 发表于 2006-1-10 19:41

原帖由 powerwind 于 2006/1/10 11:05 发表
楼主抢先一步了,我用VB.NET写的还没贴上来呢!

贴出来大家参考下。

鼓励原创,鼓励交流。。。这里好久没这么热闹了。。。

powerwind 发表于 2006-1-10 23:42

https://www.gdutbbs.com/viewthread.php?tid=61282&extra=page%3D1
在这里
页: [1]
查看完整版本: 我也来个加密与解密