⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loginform.vb

📁 Microsoft Mobile Development Handbook的代码,有C#,VB,C++的
💻 VB
字号:
Imports System.Data
Imports System.IO
Imports System.Reflection
Imports System.Security.Cryptography
Imports Microsoft.Practices.Mobile.PasswordAuthentication
Imports Microsoft.Practices.Mobile.Configuration

Public Class LoginForm

    Private users As DataSet

    Private configSettings As Dictionary(Of String, String) = Nothing

    Public Sub New(ByVal settings As Dictionary(Of String, String))
        InitializeComponent()

        configSettings = settings
    End Sub

    Private Sub LoginForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Cursor.Current = Cursors.WaitCursor
        Try
            ' Get the user details
            users = New DataSet()
            users.ReadXml(GetApplicationDirectory() + "\Users.xml")
        Finally
            Cursor.Current = Cursors.Default
        End Try
    End Sub

    Private Function GetApplicationDirectory() As String
        Return Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules(0).FullyQualifiedName)
    End Function

    Private Function AuthenticateUser(ByVal userToken As String) As PasswordIdentity
        Using provider As RsaAesCryptographyProvider = New RsaAesCryptographyProvider("MobileDevelopersHandbook")
            ' Create AuthenticationToken using existing token
            Dim token As AuthenticationToken = New AuthenticationToken(userToken)
            Dim identity As PasswordIdentity = token.Authenticate(textBoxUsername.Text, textBoxPassword.Text, provider)
            ' return result - caller checks Authenticated property to see authentication result
            Return identity
        End Using

    End Function

    Private Sub DecryptSettings(ByVal identity As PasswordIdentity, ByVal userEncryptedConfigurationKey As String)
        ' Obtain the user's key
        Dim userKeyBytes() As Byte = identity.CryptoKey

        ' Create an instance of the CryptographyBlock class
        Dim symmetric As SymmetricAlgorithm = Rijndael.Create()
        Dim block As CryptographyBlock = New CryptographyBlock(symmetric, userKeyBytes)

        ' Get the user's encrypted configuration key
        Dim configKeyBytes() As Byte = Convert.FromBase64String(userEncryptedConfigurationKey)

        ' Decrypt the key
        Dim configurationKey() As Byte = block.Decrypt(configKeyBytes)

        ' Create a configuration provider to decrypt the config file
        Dim configProvider As RijndaelConfigurationProvider = New RijndaelConfigurationProvider(configurationKey)

        ' Assign the new instance of the RijndaelConfigurationProvider class to the ConfigurationManager.
        ConfigurationManager.ProtectedConfigurationProvider = configProvider

        ' Finally, use the GetSection method of the ConfigurationManager to retrieve the section we want
        Dim sectionName As String = "SystemSettings"
        Dim configSection As SystemSettingsSection = CType(ConfigurationManager.GetSection(sectionName), SystemSettingsSection)

        ' Store the decrypted data in the settings collection
        Dim item As SystemSettingsItemElement
        For Each item In configSection.SystemSettingsItems
            configSettings.Add(item.Name, item.Value)
        Next
    End Sub


    Private Sub menuSubmitMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuSubmitMenuItem.Click
        Dim rowidx As Integer
        For rowidx = 0 To users.Tables(0).Rows.Count - 1 Step rowidx + 1
            Dim userRow As DataRow = users.Tables(0).Rows(rowidx)
            If CType(userRow("Name") = textBoxUsername.Text, String) Then
                Cursor.Current = Cursors.WaitCursor

                Try
                    Dim identity As PasswordIdentity = AuthenticateUser(CType(userRow("Token"), String))
                    If Not identity Is Nothing And identity.IsAuthenticated Then
                        ' Success!! Decrypt the config file
                        DecryptSettings(identity, CType(userRow("encKey"), String))

                        'Close the modal dialog
                        Me.DialogResult = DialogResult.OK
                    End If
                Finally
                    Cursor.Current = Cursors.Default
                End Try
            End If
        Next

        ' Show the login failed message
        labelIncorrect.Visible = True

    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -