11package com.icerockdev.util
22
3- import org.springframework.security .crypto.bcrypt.BCryptPasswordEncoder
3+ import at.favre.lib .crypto.bcrypt.BCrypt
44import java.security.MessageDigest
55
6+ // To avoid using springframework components and keep backward compatibility
7+ // GENSALT_DEFAULT_LOG2_ROUNDS in org.springframework.security.crypto.bcrypt.Bcrypt
8+ const val BCRYPT_COST = 10
9+
610object HashUtils {
7- fun sha512 (input : String ) = hashString (" SHA-512" , input)
11+ fun sha512 (input : String ): String = hash (" SHA-512" , input)
812
9- fun sha256 (input : String ) = hashString (" SHA-256" , input)
13+ fun sha256 (input : String ): String = hash (" SHA-256" , input)
1014
11- fun sha1 (input : String ) = hashString (" SHA-1" , input)
15+ fun sha1 (input : String ): String = hash (" SHA-1" , input)
1216
1317 fun generatePasswordHash (password : String ): String {
14- return BCryptPasswordEncoder ().encode( password)
18+ return BCrypt .withDefaults ().hashToString( BCRYPT_COST , password.toCharArray());
1519 }
1620
1721 fun verifyPassword (password : String , passwordHash : String ): Boolean {
18- return BCryptPasswordEncoder ().matches (password, passwordHash)
22+ return BCrypt .verifyer ().verify (password.toCharArray() , passwordHash).verified
1923 }
2024
2125 fun generateRandomToken (): String {
@@ -36,9 +40,9 @@ object HashUtils {
3640 }
3741
3842
39- private fun hashString ( type : String , input : String ): String {
43+ private fun hash ( algorithm : String , input : String ): String {
4044 return MessageDigest
41- .getInstance(type )
45+ .getInstance(algorithm )
4246 .digest(input.toByteArray())
4347 .fold(" " , { str, it -> str + " %02x" .format(it) })
4448 }
0 commit comments