Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सरल पासवर्ड एन्क्रिप्शन - मैं कैसे करूँ?

भविष्य में, मेरा सुझाव है कि आप अपने द्वारा आजमाए गए कुछ कोड दिखाए बिना उत्तर के लिए भीख मांगने से बचें।

कहा जा रहा है, मैं काट लूंगा।

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;

public class EncryptHelper
{
    public static String ehashAndSalt(String passedpass) throws NoSuchAlgorithmException, NoSuchProviderException
    {
        String passwordToHash = "password";
        String salt = getSalt();

        String securePassword = getSecurePassword(passwordToHash, salt);

        return securePassword;
    }

    private static String getSecurePassword(String passwordToHash, String salt)
    {
        String generatedPassword = null;
        try
        {
            // Create MessageDigest instance for MD5
            MessageDigest md = MessageDigest.getInstance("MD5");
            //Add password bytes to digest
            md.update(salt.getBytes());
            //Get the hash's bytes
            byte[] bytes = md.digest(passwordToHash.getBytes());
            //This bytes[] has bytes in decimal format;
            //Convert it to hexadecimal format
            StringBuilder sb = new StringBuilder();
            for(int i=0; i< bytes.length ;i++)
            {
                sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
            }
            //Get complete hashed password in hex format
            generatedPassword = sb.toString();
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        return generatedPassword;
    }

    //Add salt
    private static String getSalt() throws NoSuchAlgorithmException, NoSuchProviderException
    {
        //Always use a SecureRandom generator
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN");
        //Create array for salt
        byte[] salt = new byte[16];
        //Get a random salt
        sr.nextBytes(salt);
        //return salt
        return salt.toString();
    }
}

हैश/नमक फ़ंक्शन के लिए यहां एक अच्छा और सरल सहायक वर्ग है। बस उसी "नमक" स्ट्रिंग का उपयोग करना सुनिश्चित करें जब उपयोगकर्ता बनाया गया था जब आप उपयोगकर्ता को प्रमाणित करते हैं, अन्यथा प्रमाणीकरण विफल हो जाएगा।

जहां पासवर्ड का संबंध है, मुझे एन्क्रिप्शन के बजाय हैश/नमक फ़ंक्शन का उपयोग करना अधिक सुरक्षित लगता है, क्योंकि एन्क्रिप्शन को सही सार्वजनिक/निजी कुंजी से तोड़ा जा सकता है।

आप जावा के नेटिव एन्क्रिप्शन पर अधिक जानकारी प्राप्त कर सकते हैं यहाँ।

संपादित करें

जैसा कि @james बड़े ने बताया, आपको नमक को यादृच्छिक बनाना चाहिए। मैंने इसे दिखाने के लिए कोड में संशोधन किया है।

उपरोक्त उदाहरण का स्रोत:HowToDoInJava

फिर मैं सुझाव दूंगा कि आप नए उपयोगकर्ता बनाते समय डेटाबेस में नमक और एन्क्रिप्टेड पासवर्ड पास करें, और फिर नमक और पासवर्ड वाला एक परिणाम प्राप्त करें और इसे getSecurePassword() के समान तरीके से फीड करें। और इसके परिणाम को एक सत्यापन के रूप में उपयोग करना।

मुझे आशा है कि यह मदद करता है!

संपादित करें - 2

अपनी तालिका में "नमक" (या जो भी आपको पसंद हो) नामक एक और पंक्ति डालें, और एक नया उपयोगकर्ता डालें जिसमें एक तैयार स्टेटमेंट है, जैसे:

PreparedStatement pstmnt  = connection.prepareStatement
("insert into Usernames(`ID`,`Username`,`Password`,`Account type`, `salt`) values (?,?,?,?,?,)");
pstmnt.setInt(1, id); //would ideally be auto-incremented
pstmnt.setString(2, user); //user String obtained by any means
pstmnt.setString(3, securePassword); //from the hash/salt example above
pstmnt.setString(4, accType); //whatever naming structure you have for account types
pstmnt.setString(5, salt); //from the above example also.
pstmnt.executeUpdate();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संदेश को कैसे ठीक करें:SQLSTATE [08004] [1040] बहुत अधिक कनेक्शन

  2. पाल-mysql स्कीमा डेटाटाइप्स

  3. मैं पदों की संख्या कैसे गिन सकता हूं?

  4. ड्रॉप डाउन वैल्यू के आधार पर ऑटो फिल टेक्स्ट बॉक्स

  5. MySQL में बाइनरी स्ट्रिंग को स्टोर करना