这个函数不能实现两次异或得到原字符串,数据库里存储的是一个16进制字符串 这个加密算法比较简单,我的思路就是把登陆的密码和一个密钥进行异或,异或的结果转换为16进制串保存到数据库中,在程序登陆的时候把用户输入的登陆密码进行同样的处理,和数据库中保存的结果对比,如果相同则正确,不同则提示错误。 '加密函数 Public Function Encrypt(StrEncrypt As String) As String Dim x, y As Integer Dim C1, C2,C3 As String Dim CodeWord As String'密钥 Dim KeyLen As Integer'密钥长度 Dim strEncryptLen As Integer‘需要加密的字符串的长度 Dim Num As Integer 'xor后的值 Dim HexNum As String '16进制字符串 Dim HexNumLen As Integer On Error GoTo err strEncryptLen = Len(StrEncrypt) '字符串长度 CodeWord = "zhaojiaming" KeyLen = Len(CodeWord) Encrypt = "" For x = 1 To strEncryptLen C1 = Mid(StrEncrypt, x, 1) '按顺序取字符串一个字符 C2 = left(CodeWord, 1) '取密钥第一个字符 Num = Asc(C1) Xor Asc(C2) ' 异或一次 For y = 2 To KeyLen C3 = Mid(CodeWord, y, 1) '按顺序取密钥一个字符 Num = Asc(C3) Xor Num '连续异或 Next y HexNum = Hex(Num)'转换为16进制串 HexNumLen = Len(HexNum) If HexNumLen <> 2 Then HexNum = Format(CStr(Hex(Num)), "00") '格式化16进制串长度 End If Encrypt = Encrypt + HexNum '连接成16进制字符串 Next x Exit Function err: MsgBox err.Description, vbInformation, "提示信息" End Function

评论