In this example, we take a look at how to generate a SHA-256 hash with a salt for a given input password.
The steps we follow in the code are as follows,
Step 1: We generate a random salt using generateSalt() method. The salt is a random sequence of bytes used to add uniqueness to the hashing process.
Step 2: Next, We combine the user's password with the salt to create a salted password.
Step 3: Finally, we calculate the SHA-256 hash of the salted password using the calculateSHA256() method.
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class JavaSHA256HashWithSaltExample {
public static final String SHA256_ALGO = "SHA-256";
public static void main(String[] args) throws NoSuchAlgorithmException {
String password = "Pa$$w*rd@$2_E";
byte[] randomSalt = generateSalt();
String saltedPassword = password + bytesToHex(randomSalt);
String sha256HashedPassword = calculateSHA256(saltedPassword);
System.out.println("Salt: " + bytesToHex(randomSalt));
System.out.println("Hashed Password: " + sha256HashedPassword);
}
public static byte[] generateSalt() {
SecureRandom random = new SecureRandom();
byte[] salt = new byte[64];
random.nextBytes(salt);
return salt;
}
public static String calculateSHA256(String input) throws NoSuchAlgorithmException {
MessageDigest sha256 = MessageDigest.getInstance(SHA256_ALGO);
byte[] hashBytes = sha256.digest(input.getBytes());
return bytesToHex(hashBytes);
}
public static String bytesToHex(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
stringBuilder.append(String.format("%02x", b));
}
return stringBuilder.toString();
}
}
Output:
Facing issues? Have Questions? Post them here! I am happy to answer!
- Deep Dive into Java 8 Predicate Interface
- Read and Parse XML file using Java DOM Parser [Java Tutorial]
- Java 8 Predicate Functional Interface isEqual() Method Example
- Convert Multidimensional Array toString In Java
- How to read int value using Scanner Class Java
- Spring Boot AI + LLM + Java Code Example
- Write to a File using Java Stream API
- Implementing Bubble Sort Algorithm using Java Program
- How to Fix XmlBeanDefinitionStoreException in Java SpringBoot ApplicationConfig.xml
- YAML Parser using Java Jackson Library Example
- [Fix] java: integer number too large compilation error
- Convert JSON String to Java GSON Object Example
- Read a file using Java 8 Stream
- Java Spring Boot 3 Web Hello World with Gradle in IntelliJ
- Ways Compare Dates in Java Programming with Examples
- Pretty Print JSON String in Java Console Output
- Java JDBC with Join Queries Example
- How to Check For Updates on Windows 11 (Step-by-Step)
- [Fix] java.net.MalformedURLException: unknown protocol
- How to display date and time in GMT Timezone in Java
- Error: LinkageError occurred while loading main class UnsupportedClassVersionError [Eclipse Java]
- How to convert a String to Java 8 Stream of Char?
- RabbitMQ Queue Listener Java Spring Boot Code Example
- 5+ Fibonacci number Series Java Program Examples [ 0 1 1 2 3 ..]
- Handling NullPointerException with Java Predicate
- Docker Commit Command with Examples - Docker
- Power BI error Something went wrong, unable to read the application metadata - Microsoft
- Fix: Error: error:0308010C:digital envelope routines::unsupported NodeJs/Vue/React - JavaScript
- Add Animated Scrolling to Html Page Title Script - JavaScript
- How to create a dictionary comprehension in Python - Python
- How to list all versions of Python Modules Available using pip/pip3 - PIP
- How to Search in Notepad Application on Windows - Windows
- Fix: Error code: 0x204 Microsoft Remote Desktop - Unable to connect the remote PC. - Windows