工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1596|回复: 6

我也来个加密与解密

[复制链接]
发表于 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
发表于 2006-1-10 13:16 | 显示全部楼层
不错.

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

使用道具 举报

 楼主| 发表于 2006-1-10 18:12 | 显示全部楼层
thx
回复

使用道具 举报

发表于 2006-1-10 19:05 | 显示全部楼层
楼主抢先一步了,我用VB.NET写的还没贴上来呢!
回复

使用道具 举报

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



那贴出来大家参考
回复

使用道具 举报

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


贴出来大家参考下。

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

使用道具 举报

发表于 2006-1-10 23:42 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 11:41

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表