6

私はオンラインSMFフォーラムを持っており、ユーザーが登録すると、パスワードはデータベースのSHA1で暗号化されます。フォーラムのメンバーだけがログインできるログイン機能を備えたvbプログラムを作成する必要があります。今私が立ち往生している部分は、ビジュアルベーシックでパスワードをSHA1に暗号化する方法です。正しいかどうかわからないコードをいくつか含めたので、助けてください。

Imports System.Security.Cryptography
Public Class Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' declare those variables
    Dim password As String
    Dim passwordSHA As String

    password = txtPassword.Text ' give password the value of the password textbox

    Call passwordEncryptSHA(password) ' Lets call the first password encryption function for SHA1

    passwordSHA = passwordEncryptSHA(password) ' give the variable the returned SHA value

    ' finally we will display both values in the corresponding textboxes
    txtSHA1.Text = passwordSHA


End Sub
Public Function passwordEncryptSHA(ByVal password As String) As String
    Dim sha As New SHA1CryptoServiceProvider ' declare sha as a new SHA1CryptoServiceProvider
    Dim bytesToHash() As Byte ' and here is a byte variable

    bytesToHash = System.Text.Encoding.ASCII.GetBytes(password) ' covert the password into ASCII code

    bytesToHash = sha.ComputeHash(bytesToHash) ' this is where the magic starts and the encryption begins

    Dim encPassword As String = ""

    For Each b As Byte In bytesToHash
        encPassword += b.ToString("x2")
    Next

    Return encPassword ' boom there goes the encrypted password!

End Function

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
End Class

ありがとう、そして私はまだ学んでいるので(私は15歳です)、意地悪しないでください!

4

2 に答える 2

14
Imports System.IO
Public Class Form1

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyValue = Keys.Enter Then
        TextBox2.Text = getSHA1Hash(TextBox1.Text)
        Label3.Text = TextBox2.Text.Length
    End If
End Sub

Function getSHA1Hash(ByVal strToHash As String) As String

    Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider
    Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash)

    bytesToHash = sha1Obj.ComputeHash(bytesToHash)

    Dim strResult As String = ""

    For Each b As Byte In bytesToHash
        strResult += b.ToString("x2")
    Next

    Return strResult

End Function

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Dim fs As New FileStream("location.txt", FileMode.OpenOrCreate, FileAccess.Write)
    Dim sr As New StreamWriter(fs)
    fs.SetLength(0)
    sr.WriteLine(Me.Location.X)
    sr.WriteLine(Me.Location.Y)
    sr.Close()
    fs.Close()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If File.Exists("location.txt") Then
        Dim fs As New FileStream("location.txt", FileMode.Open, FileAccess.Read)
        Dim sr As New StreamReader(fs)

        Me.Location = New Point(sr.ReadLine, sr.ReadLine)
        sr.Close()
        fs.Close()
    End If
End Sub

Private Sub TextBox1_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    If e.KeyValue = Keys.Escape Then
        Application.Exit()
    End If
End Sub
End Class

ここに画像の説明を入力してください
だから:-)それは私があなたのために作成した小さなプログラムです。それが有用で幸せな学習になることを願っています。
ヒント:余分なポジショニングコードは無視してください。怠惰なプログラマーの古い習慣に他なりません...ちなみに、ハッシュは1つの方法であり、暗号化は2つの方法です(暗号化してから復号化して同じデータを取り戻すことができますが、データのハッシュを解除できません)。

于 2012-06-07T12:49:24.410 に答える
0

テストされていません!

これを変更するとどうなりますか...

..。

Dim encPassword As String = ""

For Each b As Byte In bytesToHash
   encPassword + = b.ToString( "x2")
次

..。

これに

Dim encPassword As String = ""

encPassword = System.Text.Encoding.ASCII.GetString(bytesToHash);
于 2012-06-07T01:06:36.757 に答える