当前位置:文档之家› 加密解密程序

加密解密程序

Const mstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
Const Cmstr = 62


MD5加密技术

Public Function EnCodeStr(ByVal s As String) As String '加密
If Len(s) = 0 Then Exit Function
Dim buff() As Byte
buff = StrConv(s, vbFromUnicode)
Dim i As Long
Dim j As Byte
Dim k As Byte, m As Byte
Dim outs As String
i = UBound(buff) + 1 '计算“明文”数据的长度
outs = Space(2 * i) '使“密文”数据的长度为“明文”数据长度的两倍
Dim temps As String
For i = 0 To UBound(buff)
Randomize Time
j = CByte(5 * (Math.Rnd()) + 0) '最大产生的随机数只能是5,不能再大了,再大的话就要多用一个字节
buff(i) = buff(i) Xor j
k = buff(i) Mod Cmstr '求该字符在模板字符串中的位置k
m = buff(i) \ Cmstr '求该字符在模板字符串中循环的次数
m = m * 2 ^ 3 + j '求模板字符串中另一字符位置m
temps = Mid(mstr, k + 1, 1) + Mid(mstr, m + 1, 1) '从模板字符串中取出这两个字符合成
Mid(outs, 2 * i + 1, 2) = temps
Next
EnCodeStr = outs
End Function

Public Function DeCodeStr(ByVal s As String) As String '解密
On Error GoTo myERR
Dim i As Long
Dim j As Byte
Dim k As Byte
Dim m As Byte
Dim t1 As String, t2 As String
Dim buff() As Byte
Dim n As Long
n = 0
For i = 1 To Len(s) Step 2
t1 = Mid(s, i, 1) '连续取相邻位置上的两个字符到t1和t2中
t2 = Mid(s, i + 1, 1)
k = InStr(1, mstr, t1) - 1 '查找t1和t2两个字符在模板字符串中的位置存放到k的m中
m = InStr(1, mstr, t2) - 1
j = m \ 2 ^ 3
m = m - j * 2 ^ 3
ReDim Preserve buff(n)
buff(n) = j * Cmstr + k
buff(n) = buff(n) Xor m
n = n + 1
Next
DeCodeStr = StrConv(buff, vbUnicode)
Exit Function
myERR:
DeCodeStr = ""
End Function



1.函数StrConv(string, conversion, LCID)
说明:
string 必要参数。要转换的字符串表达式。
conversion 必要参数。Integer。其值的和决定转换的类型。
LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)
其中:
conversion 参数的设置值为:
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。


2.ANSI、DBCS 和 Unicode 的定义
Visual Basic 使用 Unicode 存储和操作字符串。Unicode 是一种用两个字节表示一个字符的字符集。另外一些程序,如 Windows 95 API,使用 ANSI (American National Standards Institute) 或 DBCS 存储和操作字符串。当从 Visual Basic 移出字符串时,会遇到 Unicode 和 ANSI/DBCS 之间的差

别。下表列出了不同环境下 ANSI、DBCS 和 Unicode 字符集。

环境 使用的字符集
Visual Basic: Unicode
32-bit 对象库: Unicode
16-bit 对象库: ANSI 和 DBCS
Windows NT API: Unicode
Automation in Windows NT: Unicode
Windows 95 API: ANSI 和 DBCS
Automation in Windows 95: Unicode


ANSI
ANSI 是个人计算机使用得最普遍的字符集。由于 ANSI 标准使用单一字节表示每个字符,因此最多只能有 256 个字符和标点符号代码。虽然对英语来说已经足够了,但不能完全支持其它语言。

DBCS
发行在亚洲大部分地区的 Microsoft Windows 系统使用 DBCS。它支持很多不同的东亚语言字母,如汉语、日语和朝鲜语。DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而日语、朝鲜语和其它东亚字符的长度是 2 个字节。

Unicode
Unicode 是用两个字节表示每个字符的字符编码方案。国际标准组织 (ISO) 几乎为每种语言的每个字符和符号在 0 到 65,535 (216 – 1) 范围内定义了一个数字(再加上为将来发展保留的一些空余空间)。在所有 32 位版本的 Windows 中,部件对象模型 (COM) 都使用 Unicode,它是 OLE 和 ActiveX 技术的基础。Windows NT 全部支持 Unicode。虽然 Unicode 和 DBCS 都是双字节字符,但它们的编码方案完全不同。




相关主题
文本预览
相关文档 最新文档