2016-12-15 5 views
0

Пусть говорят я encripted SHA1 пароль как этотКак сравнить sha1 encripted password в Java?

String pass = "f6ce584e7b4ff5253eed4a2ea2b44247"; 

и я хочу сделать состояние, как это:

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

пожалуйста, кто-то поможет мне сделать надлежащее состояние/функция для сравнения те как значение между пользователем ввод и ввод в действие пароля. Ваша помощь будет высоко оценена. благодаря

+0

Во-первых узнать, как получить хэш SHA1 ' "UserInput"' (в 'javax.crypto' пакет может помогите с этим), преобразуйте результаты в шестнадцатеричную строку и сравните. – Kayaman

+1

На самом деле, лучше всего, чтобы вы не пропускали пароль пользователя в виде обычного текста. Если это на веб-сайте, вы должны сделать хэширование sha1 с помощью Javascript и отправить его уже hashed. Тогда сравнение очень просто. – RealSkeptic

+0

@RealSkeptic Итак, MIM может просто захватить хэш вместо пароля? Это точно так же безопасно, как отправка пароля открытого текста. – Durandal

ответ

1

SHA1 - алгоритм хеширования, что означает, что он является односторонним. Вы не можете получить исходное сообщение после его хэширования. В отличие от шифрования, которое является двухсторонним (позволяет шифровать и расшифровывать).

Это означает, что если вы хотите сравнить хэш, вы не пытаетесь получить исходное сообщение. Вместо этого, вы хеширования сообщение-к-быть по сравнению, а также, то вы выполняете матч:

Так, если хешированной ПВт хранится в виде:

String pass = "f6ce584e7b4ff5253eed4a2ea2b44247"; 

Для согласования с последующим вводом пароля, вы делаете:

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

для реализации sha1() хэш-функцию, см: Java String to SHA1

+1

очень умный и понятный answare ... спасибо большое. .. –

0

Чтобы получить хэш-код:

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 

Найдено эти на https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html#sha1Hex(java.lang.String)

Это поможет вашему процессу.

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"); 
     } 

    } 

} 

Это работает !!!

+0

Я взял пользовательский ввод напрямую, код можно изменить, чтобы ввести код –

+0

Я попытался использовать их сравнить напрямую, но я был не в состоянии, fyi использовал весенний фреймворк –

 Смежные вопросы

  • Нет связанных вопросов^_^