vb.net 加密到 SHA1 Visual Basic - VB 2010
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10924238/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Encrypting to SHA1 visual basic - VB 2010
提问by Milad Shkoh
I have an online SMF forum and when a user registers the password is encrypted with SHA1 in the database. I need to create a vb program with a login feature where only members of the forum can login. Now the part I'm stuck in is how do I encrypt the password into SHA1 in visual basic? I included some code which I don't know is correct or not so please help me out.
我有一个在线 SMF 论坛,当用户注册时,密码在数据库中使用 SHA1 加密。我需要创建一个具有登录功能的 vb 程序,只有论坛成员才能登录。现在我陷入困境的部分是如何在visual basic中将密码加密为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
Thank you and please don't be mean because I am still learning (I'm 15)!
谢谢你,请不要刻薄,因为我还在学习(我 15 岁)!
回答by Tawfik Khalifeh
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
so :-) its a small program I've created for you, hope it'll be useful, happy learning.
tip: ignore the extra positioning code, its nothing but an old habit of a lazy programmer..., by the way hashing is one way, encryption is two way (you can enc and then decrypt to get the same data back, but you cant un-hash data).
所以:-)它是我为你创建的一个小程序,希望它有用,快乐学习。
提示:忽略额外的定位代码,它只不过是一个懒惰的程序员的旧习惯......顺便说一下,散列是一种方式,加密是两种方式(您可以先加密然后解密以获取相同的数据,但是您不能取消散列数据)。
回答by Calvin Allen
Untested!
未经测试!
What if you change this...
如果你改变这个...
... Dim encPassword As String = "" For Each b As Byte In bytesToHash encPassword += b.ToString("x2") Next ...
to this
对此
Dim encPassword As String = "" encPassword = System.Text.Encoding.ASCII.GetString(bytesToHash);