2016-12-15 1 views
0

Lassen Sie sagen, ich SHA1 Passwort wie diesewie sha1 Passwort in Java zu vergleichen?

String pass = "f6ce584e7b4ff5253eed4a2ea2b44247"; 

und ich möchte Bedingung wie diese macht encripted habe:

if (pass.equals("userinput")){ 
     System.out.println("success"); 
    } 

bitte jemand mir helfen ordnungsgemäßen Zustand zu machen/Funktion sowohl diejenigen Werte zwischen Benutzer vergleichen Eingabe und verschlüsseltes Passwort. Ihre Hilfe wird sehr geschätzt. Dank

+0

Zuerst lernen, wie man die SHA1-Hash ' "userinput"erhalten' (die 'javax.crypto' Paket kann Hilf dabei, konvertiere die Ergebnisse in eine Hex-Zeichenkette und vergleiche. – Kayaman

+1

In der Tat ist es am besten, dass Sie das Benutzerpasswort überhaupt nicht im Klartext übergeben. Wenn dies auf einer Website ist, sollten Sie das sha1-Hashing mit Javascript durchführen und es bereits hashed senden. Dann ist der Vergleich sehr einfach. – RealSkeptic

+0

@RealSkeptic So ein MIM kann nur den Hash anstelle des Passwortes greifen? Das ist genau so sicher wie das Klartext-Passwort. – Durandal

Antwort

1

SHA1 ist ein Hash-Algorithmus, was bedeutet, dass es in eine Richtung ist. Sie können die ursprüngliche Nachricht nach dem Hash-Vorgang nicht abrufen. Im Gegensatz zu Verschlüsselung, die zwei-Wege ist (ermöglicht Verschlüsselung und Entschlüsselung).

Das bedeutet, wenn Sie einen Hashwert vergleichen möchten, versuchen Sie nicht, die ursprüngliche Nachricht zu erhalten. Stattdessen Sie die Nachricht-zu-sein-Vergleich als auch Hash, dann führen Sie das Spiel:

Also, wenn der Hash ist pw gespeichert als:

String pass = "f6ce584e7b4ff5253eed4a2ea2b44247"; 

Um die anschließende Eingabe des Passworts übereinstimmen, Sie tun:

//check if hashed userInput is also "f6ce584e7b4ff5253eed4a2ea2b44247" 
if(pass.equals(sha1(userInput))){   
    //do whatever 
} 

eine sha1() Hash-Funktion zu implementieren, finden Sie unter: Java String to SHA1

+1

sehr intelligent und klar Answare ... vielen Dank. .. –

0

Ihre hashcode Um:

public static byte[] sha1(byte[] data) 
Calculates the SHA-1 digest and returns the value as a byte[]. 
Parameters: 
data - Data to digest 
Returns: 
SHA-1 digest 

Gefunden diese bei https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html#sha1Hex(java.lang.String)

Dies hilft Ihrem Prozess.

import java.io.UnsupportedEncodingException; 
import java.security.InvalidKeyException; 
import java.security.NoSuchAlgorithmException; 

import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 

import org.apache.commons.codec.binary.Base64; 
import org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi.SHA1; 

public class SHA1_test { 

    public static String sha1(String s, String keyString) 
      throws UnsupportedEncodingException, NoSuchAlgorithmException, 
      InvalidKeyException { 

     SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), 
       "HmacSHA1"); 
     Mac mac = Mac.getInstance("HmacSHA1"); 
     mac.init(key); 

     byte[] bytes = mac.doFinal(s.getBytes("UTF-8")); 

     return new String(Base64.encodeBase64(bytes)); 

    } 

    public static void main(String[] args) throws InvalidKeyException, 
      UnsupportedEncodingException, NoSuchAlgorithmException { 
     Boolean validate = false; 
     String code = sha1("admin", "123456"); 
     String your_user_inputString = "testpassword"; 

     if (code.equals(sha1(your_user_inputString, "123456"))) { 
      System.out.println("Correct"); 
     } else { 
      System.out.println("Bad password"); 
     } 

    } 

} 

Das funktioniert !!!

+0

Ich habe Benutzereingabe direkt genommen sogar, Code kann geändert werden, um Eingang hat Code –

+0

ich habe versucht zu verwenden, sie direkt zu vergleichen, aber ich war gescheitert, fyi ich benutzte Frühling Rahmen –