• Bogart SysPwd.vb


    Module syspwd
    
        Public Const STR_MASK = "MyFunction"            '加密用字串
        Public Const INT_PWD_LENGTH = 10                '預定義密碼長度
        Public GintCheckPwd As Integer
        '當傳入的密碼長度大於預定義密碼長度時
        '將?生一個Message Box
        '以下兩個常量是該Message Box中的具體提示資訊和標題欄中的文字
        Public Const STR_PWD_ERROR = "The length of password can not be greater than 10 characters !"
        Public Const STR_SYSTEM_NAME = "Bogart Report System"
    
        Public Const STR_INVALID_USER = "Password is not valid !"
        Public Const STR_CHANGE_PASSWORD_ERROR = "User ID is not valid !"
    
        '以下的變數的定義在正式使用時去掉
    
        '該函數的作用是將傳入的密碼字串轉換成加密的密碼字串
        '傳入的字串是用戶輸入的未經過系統加密的密碼
        '傳出的資料類型是字串型,?經過系統加密後的密碼
    
        Public Function EnPwd(ByVal strIn As String) As String
            Dim intCount As Integer
            Dim intPwdWord() As Integer
            Dim intTemp As Integer
            Dim strColumn1 As String
            Dim strColumn2 As String
            Dim strColumn3 As String
            Dim strTemp As String
            Dim intDivTemp As Integer
    
            strColumn1 = ""
            strColumn2 = ""
            strColumn3 = ""
            intTemp = 0
            strTemp = ""
            intDivTemp = 0
    
            If Len(strIn) > INT_PWD_LENGTH Then
                MsgBox(STR_PWD_ERROR, , STR_SYSTEM_NAME)
                EnPwd = ""
                Exit Function
            End If
            ReDim intPwdWord(INT_PWD_LENGTH)
    
            For intCount = 1 To INT_PWD_LENGTH
                If Len(STR_MASK) < INT_PWD_LENGTH Then
                    intTemp = intTemp + 1
                    If intTemp > Len(STR_MASK) Then
                        intTemp = 1
                    End If
                    intPwdWord(intCount) = Asc(Mid(STR_MASK, intTemp, 1))
                Else
                    intPwdWord(intCount) = Asc(Mid(STR_MASK, intCount, 1))
                End If
            Next
            For intCount = 1 To Len(strIn)
                intTemp = Asc(Mid(strIn, intCount, 1))
                intDivTemp = intDivTemp + 1
                If intDivTemp > 5 Then
                    intDivTemp = 1
                End If
                intTemp = intTemp * intDivTemp
                intPwdWord(intCount) = intPwdWord(intCount) + intTemp
            Next
            For intCount = 1 To INT_PWD_LENGTH
                strTemp = CStr(intPwdWord(intCount))
                If Len(strTemp) < 3 Then
                    strTemp = StrDup(3 - Len(strTemp), "0") & strTemp
                End If
                strColumn1 = strColumn1 & Mid(strTemp, 1, 1)
                strColumn2 = strColumn2 & Mid(strTemp, 2, 1)
                strColumn3 = strColumn3 & Mid(strTemp, 3, 1)
            Next
            EnPwd = strColumn1 & strColumn2 & strColumn3
    
        End Function
    
        '該函數的作用是將傳入的加密的密碼字串轉換成不加密的密碼字串
        '傳入的字串是經過系統加密後的密碼
        '傳出的資料類型是字串型,?未經過系統加密的密碼
    
        Public Function DePwd(ByVal strIn As String) As String
            Dim intCount As Integer
            Dim intTemp As Integer
            Dim strTemp As String
            Dim strColumn1 As String
            Dim strColumn2 As String
            Dim strColumn3 As String
            Dim intPwdWord() As Integer
            Dim intDivTemp As Integer
    
            DePwd = ""
            strColumn1 = ""
            strColumn2 = ""
            strColumn3 = ""
            intTemp = 0
            strTemp = ""
            intDivTemp = 0
    
            strColumn1 = Mid(strIn, 1, INT_PWD_LENGTH)
            strColumn2 = Mid(strIn, INT_PWD_LENGTH + 1, INT_PWD_LENGTH)
            strColumn3 = Mid(strIn, INT_PWD_LENGTH * 2 + 1, INT_PWD_LENGTH)
            strTemp = ""
            For intCount = 1 To INT_PWD_LENGTH
                strTemp = strTemp & Mid(strColumn1, intCount, 1)
                strTemp = strTemp & Mid(strColumn2, intCount, 1)
                strTemp = strTemp & Mid(strColumn3, intCount, 1)
            Next
            ReDim intPwdWord(INT_PWD_LENGTH)
            For intCount = 1 To INT_PWD_LENGTH
    
                intPwdWord(intCount) = Val(Mid(strTemp, intCount * 3 - 2, 3))
                If Len(STR_MASK) < INT_PWD_LENGTH Then
                    intTemp = intTemp + 1
                    If intTemp > Len(STR_MASK) Then
                        intTemp = 1
                    End If
                    intPwdWord(intCount) = intPwdWord(intCount) - Asc(Mid(STR_MASK, intTemp, 1))
                Else
                    intPwdWord(intCount) = intPwdWord(intCount) - Asc(Mid(STR_MASK, intCount, 1))
                End If
                intDivTemp = intDivTemp + 1
                If intDivTemp > 5 Then
                    intDivTemp = 1
                End If
                intPwdWord(intCount) = intPwdWord(intCount) / intDivTemp
                If intPwdWord(intCount) <> 0 Then
                    DePwd = DePwd & Chr(intPwdWord(intCount))
    
                End If
            Next
    
        End Function
    
        '以下函數?檢查密碼是否有效
        '傳入的第一個參數?用戶名,第二個是密碼(未加密)
        '如果密碼正確,則返回True
        '如果密碼不正確或該用戶不存在,則出現MsgBox後返回False
        Public Function CheckPwd(ByVal strUser As String, ByVal strPassword As String) As Boolean
            GintCheckPwd = GintCheckPwd + 1
            Dim Rs As New ADODB.Recordset
            Dim strSQLStmt As String
    
            CheckPwd = False
            On Error GoTo DBError
            If adoConn.State <> ConnectionState.Open Then
                adoConn.Open()
            End If
    
            strSQLStmt = "SELECT Password FROM " & g.gRptdev & "g_userid WHERE UserID='" & strUser & "'"
    
            '以下的dbconn應該改寫成統一的連庫
            Rs.Open(strSQLStmt, adoConn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
            If Rs.Fields(0).Value <> EnPwd(strPassword.ToUpper) Then
                MsgBox(STR_INVALID_USER, vbCritical, STR_SYSTEM_NAME)
                'If GintCheckPwd = 3 Then
                '    MsgBox("您已經三次登陸失敗,系統將退出", vbExclamation, STR_SYSTEM_NAME)
                'End If
                Exit Function
            End If
    
            CheckPwd = True
    
            Exit Function
    DBError:
            MsgBox(STR_INVALID_USER, vbExclamation, STR_SYSTEM_NAME)
        End Function
    
        '以下函數?檢查密碼是否有效
        '傳入的第一個參數?用戶名,第二個是新密碼(未加密)
        '如果更改成功,則返回True
        '如果更改不成功(可能因?用戶不存在等原因),則出現MsgBox後返回False
        Public Function ChangePwd(ByVal strUser As String, ByVal strPassword As String) As Boolean
            Dim Rs As ADODB.Recordset
            Dim strSQLStmt As String
    
            ChangePwd = False
            On Error GoTo DBError
            adoConn.BeginTrans()
            strSQLStmt = "SELECT Password FROM " & g.gRptdev & "g_userid WHERE UserID='" & strUser & "'"
    
            '以下的dbconn應該改寫成統一的連庫
            Rs = adoConn.Execute(strSQLStmt)
            If Rs.EOF Then
                MsgBox(STR_CHANGE_PASSWORD_ERROR, , STR_SYSTEM_NAME)
                Rs.Close()
                adoConn.RollbackTrans()
                Exit Function
            End If
            Rs.Close()
            strSQLStmt = "UPDATE " & g.gRptdev & "g_userid SET Password = '" & EnPwd(strPassword.ToUpper) & "' WHERE UserID='" & strUser & "'"
    
            adoConn.Execute(strSQLStmt)
            adoConn.CommitTrans()
            ChangePwd = True
            Exit Function
    DBError:
            MsgBox(STR_CHANGE_PASSWORD_ERROR, , STR_SYSTEM_NAME)
            adoConn.RollbackTrans()
        End Function
    End Module
  • 相关阅读:
    一次向svn中增加所有新增文件 svn add all new files
    cocos2d-x Lua与OC互相调用
    IOS8开发之实现App消息推送
    IOS Remote Notification
    再见
    vue中$router.push打开新窗口
    nuxt拦截IE浏览器
    百度统计api获取数据
    css滚动条样式自定义
    nuxt框架Universal和Spa两种render mode的区别
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/3368381.html
Copyright © 2020-2023  润新知