Avatar billede stinejh1980 Nybegynder
07. april 2010 - 13:26 Der er 18 kommentarer og
1 løsning

Opdatere password kryptering fra MD5

Jeg har overtaget et system der kører med MD5 kryptering.

Er der nogen der kan anbefale mig en mere sikker kryptering.
Gerne en der kræver a-z/A-Z samt 0-9 og evt #&@

Det skal bruges til ASP.NET og VB.NET programmeret webportal.

Det skal helst kunne implementeres i den eksistrende platform og på en MSSQL database.
Avatar billede arne_v Ekspert
07. april 2010 - 15:17 #1
MD5 er ikke kryptering men hashing (nogen kalder det dog for envejs kryptering).

MD5 er ikke god idag. Men det betyder ikke noedvendigvis at det er risikabelt i din sammenhaeng. Du boer dog nok alligevel skifte til SHA-256.

Restriktioner paa tegn foer hashing skal ordnes i input validering.

Restriktioner paa tegn efter hashing skal ordnes ved at konvertere den binaere hash til tekst med f.eks. Hex eller Base64 encoding.
Avatar billede stinejh1980 Nybegynder
08. april 2010 - 07:58 #2
Jeg kender intet til SHA-256. Foregår det i koden eller i Db?

Jeg har prøvet Hex før, men ikke på denne måde.
Kan du give et eksempel på hashing der konvertere med Hex bagefter?
Avatar billede arne_v Ekspert
08. april 2010 - 15:22 #3
MySQL understoetter ikke SHA-256 endnu, saa det skal laves i app.
Avatar billede arne_v Ekspert
08. april 2010 - 15:23 #4
Hex kan laves baade i app og i db.

MySQL har HEX og UNHEX funktioner til det samme.
Avatar billede stinejh1980 Nybegynder
16. april 2010 - 08:36 #5
Har du evt et eksempel?
Jeg har fuldstændig på bar bund. Jeg har altid haft andre til at lave sikkerheden for mig, så jeg ved slet ikke hvor jeg skal starte.

Evt keywords til at søge på Google med ville også hjælpe.
Avatar billede arne_v Ekspert
17. april 2010 - 03:56 #6
Et eksempel på hvad?
Avatar billede stinejh1980 Nybegynder
19. april 2010 - 10:54 #7
Jeg tænkte bare om du kan henvise til noget der kan hjælpe mig med at komme i gang, som sagt er jeg helt på bar bund og ved ikke hvor jeg skal begynde
Avatar billede arne_v Ekspert
19. april 2010 - 18:42 #8
Hvad med et stykke VB.NET kode til at beregne SHA-256 hash af et password ?
Avatar billede arne_v Ekspert
20. april 2010 - 03:28 #9
Imports System
Imports System.Text
Imports System.Security.Cryptography

Namespace E
    Public Class Util
        Public Shared Function SHA256(pw As String) As String
            Dim alg As HashAlgorithm = New SHA256Managed()
            Dim b As Byte() = Encoding.UTF8.GetBytes(pw)
            alg.TransformFinalBlock(b, 0, b.Length)
            Return BitConverter.ToString(alg.Hash).Replace("-", "")
        End Function
    End Class
    Public Class Program
        Public Shared Sub Main(args As String())
            Console.WriteLine(Util.SHA256("Hemmmeligt"))
            Console.WriteLine(Util.SHA256("Super hemmmeligt"))
            Console.ReadKey()
        End Sub
    End Class
End Namespace
Avatar billede stinejh1980 Nybegynder
21. april 2010 - 13:53 #10
Mine brugere skal opdatere deres password så det er tidssvarende.
Hvad siger du til følgende?

HTML:
Validering vha:
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TBNewPsw"
ValidationExpression="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Display="Dynamic"
ErrorMessage="Password doesn't follow the rules" />   

og

<asp:CompareValidator id="valCompare" runat="server" ControlToValidate="TBNewPsw" ControlToCompare="TBConfirmPsw" Operator="Equal" ErrorMessage="Your confirm password has to be the same as the new password" Display="dynamic"></asp:CompareValidator>

Kode:
        Dim alg As HashAlgorithm = New SHA256Managed()
        Dim b As Byte() = Encoding.UTF8.GetBytes(TBNewPsw.Text)
        alg.TransformFinalBlock(b, 0, b.Length)
        Dim SHAPassword As String = BitConverter.ToString(alg.Hash).Replace("-", "")
       
        Dim UserID As Integer = SharedFunction.Cookie_UserID()

        MyCommand = New SqlCommand

        MySQL = "UPDATE ES_PartnernetUser Set ES_PartnernetUserPassword=@ES_PartnernetUserPassword WHERE ES_PartnernetUserID = " & UserID
        MyCommand.Parameters.AddWithValue("@ES_PartnernetUserPassword", SHAPassword)
        MyCommand.CommandText = MySQL
        MyCommand.Connection = MyConnection
        Try
            MyCommand.ExecuteNonQuery()
        Catch ex As Exception
            LblMessage.Text = ex.ToString & "<br/><br/><br/>"
            LblMessage.Visible = True
        End Try
Avatar billede arne_v Ekspert
22. april 2010 - 02:03 #11
Det er sikkert OK.

Lidt blandede betragtninger:
1) hvis du skifter password hashing på et eksisterende site skal du i en overgangsperiode kunne håndtere begge algoritmer (ikke så svært du kan detecte MD5 eller SHA256 via længden)
2) når du bruger parameters til password så bill ejeg også bruge parameter til userid
3) jeg ville nok lave en kodemæssig validering fremfor regex, fordi det giver mere fleksibilitet og er mindre kryptisk
Avatar billede stinejh1980 Nybegynder
22. april 2010 - 09:22 #12
1) Ok
2) Kan du lige forklare det med parametre nærmere
3) Det er den form for validering der anbefales når man arbejder med asp.net - men det kommer vel an på hvem man snakker med
Avatar billede arne_v Ekspert
23. april 2010 - 01:57 #13
re 2)

Du har en SQL sætning hvor du har password og userid. Du bruger parameter til password men ikke til id. Jeg synes at du skulle bruge parameter til begge.
Avatar billede arne_v Ekspert
23. april 2010 - 02:00 #14
re 3)

Det er en af metoderne der kan bruges.

Jeg snakker om en CustomValidator.

En hurtig googling finder bl.a.:
  http://www.4guysfromrolla.com/articles/073102-1.aspx
Avatar billede stinejh1980 Nybegynder
27. april 2010 - 14:21 #15
MHT parameter, så er jeg bare vant til at gøre det således, har ikke tænkt nærmere over det, men har ændret til det parameter.

Jeg ved at sha256 er 32 bit og at md5 er 128 bit, men hvordan får jeg værdien i databasen omregnet til bit? og derefter talt?
Avatar billede arne_v Ekspert
27. april 2010 - 14:46 #16
SHA256 er 256 bit = 32 byte. MD5 er 128 bit = 16 byte.

Hex fordobler stoerrelsen.

Hvis du gemmer i hex format i en VARCHAR(64) saa vil vaerdierne vaere henholdvis 64 og 32 lange. Det er til at teste paa !!
Avatar billede stinejh1980 Nybegynder
27. april 2010 - 14:59 #17
jeg gjorde følgende:


        Dim intLoginStatus As Integer = 0
        If MyDS.Tables(0).Rows.Count = 0 Then
            'user does not exist
            intLoginStatus = -1
            'Exit Sub
        Else
            Dim CurrentUserPassword As String = MyDS.Tables(0).Rows(0).Item("mypassword")
            Dim PasswordLength As Integer = CurrentUserPassword.Length()
           
            If PasswordLength = 32 Then
                Dim MD5Password As String = FormsAuthentication.HashPasswordForStoringInConfigFile(TBLogin.Text, "MD5")
                If MD5Password <> MyDS.Tables(0).Rows(0).Item("mypassword") Then
                    'change password
                    intLoginStatus = 5
                Else
                    ' User ok and data has been fetched
                    intLoginStatus = 1
                End If
            ElseIf PasswordLength = 64 Then
                Dim alg As HashAlgorithm = New SHA256Managed()
                Dim b As Byte() = Encoding.UTF8.GetBytes(TBLogin.Text)
                alg.TransformFinalBlock(b, 0, b.Length)
                Dim SHAPassword As String = BitConverter.ToString(alg.Hash).Replace("-", "")

                If SHAPassword <> MyDS.Tables(0).Rows(0).Item("mypassword") Then
                    'wrong password
                    intLoginStatus = -2
                Else
                    ' User ok and data has been fetched
                    intLoginStatus = 1
                End If
            End If

        End If
        'LblErrorMessage.Text = intLoginStatus

        Select Case intLoginStatus
            Case 1
                LblErrorMessage.Text = "Correct Login"
            Case -1
                LblErrorMessage.Text = "The username you entered does not exist. Try again, please"
            Case -2
                LblErrorMessage.Text = "The password you entered is wrong or does not belong to this account. Try again, please"
            Case 5
                LblErrorMessage.Text = "Change Password"
        End Select
    End Sub
Avatar billede stinejh1980 Nybegynder
27. august 2010 - 11:14 #18
Det blev forresten genialt.
Tusind tak for hjælpen.
Smider du et svar :-)
Avatar billede arne_v Ekspert
27. august 2010 - 15:15 #19
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester