PasswordEncoder
passwordEncoder
는 비밀번호를 암호화하는데 사용된다. 인증 프로세스에서 암호가 유효한지를 확인한다.
Copy public interface PasswordEncoder {
fun encode (rawPassword: CharSequence ): String
fun matches (rawPassword: CharSequence , encodedPassword: String ): Boolean
}
matches()
: 암호화된 비밀번호와 사용자가 제공한 비밀번호를 비교한다. encode()
: 사용자가 제공한 비밀번호를 암호화한다.
기본 제공되는 PasswordEncoder
NoOpPasswordEncoder
: 비밀번호를 암호화하지 않는다. (테스트용)
StandardPasswordEncoder
SHA-256 해시 함수를 사용하여 비밀번호를 암호화한다.
Copy @Bean
fun passwordEncoder (): PasswordEncoder = StandardPasswordEncoder ( "secret key" )
Pbkdf2PasswordEncoder
PBKDF2 해시 함수를 사용하여 비밀번호를 암호화한다.
Copy @Bean
fun passwordEncoder (): PasswordEncoder = Pbkdf2PasswordEncoder ( "secret key" , 185000 , 256 )
두번째와 세번째 인자는 각각 반복 횟수와 해시 길이를 나타낸다.
BCryptPasswordEncoder
BCrypt 해시 함수를 사용하여 비밀번호를 암호화한다.
Copy @Bean
fun passwordEncoder (): PasswordEncoder = BCryptPasswordEncoder ( 4 ) // 4 ~ 31 사이의 값으로 강도를 설정한다.
SCryptPasswordEncoder
SCrypt 해시 함수를 사용하여 비밀번호를 암호화한다.
Copy @Bean
fun passwordEncoder (): PasswordEncoder = SCryptPasswordEncoder ( 16384 , 8 , 1 , 32 , 64 )
각각의 인자는 다음과 같다.
DelegatingPasswordEncoder
DelegatingPasswordEncoder
는 여러 암호화 알고리즘을 지원한다.
Copy @Bean
fun passwordEncoder (): PasswordEncoder = DelegatingPasswordEncoder (
"bcrypt" ,
mapOf (
"bcrypt" to BCryptPasswordEncoder ( 4 ),
"scrypt" to SCryptPasswordEncoder ( 16384 , 8 , 1 , 32 , 64 ),
"pbkdf2" to Pbkdf2PasswordEncoder ( "secret key" , 185000 , 256 ),
"sha256" to StandardPasswordEncoder ( "secret key" )
)
)
접두사를 사용하여 암호화 알고리즘을 지정할 수 있다.
Copy // EXAMPLE
{bcrypt}$2a$ 10 $zj4J6T5Zzv6ZzR9ZzZzZzO // BCrypt
{pbkdf2}5d923b44d9d5f6 .. . // PBKDF2
.. .
키 생성기
특정한 종류의 키를 생성하는데 사용되는 객체로써, 암호화나 해싱 알고리즘에 사용된다
StringKeyGenerator
Copy public interface StringKeyGenerator {
fun generateKey (): String
}
///
val keyGenerator: StringKeyGenerator = KeyGenerator. string ()
val salt: String = keyGenerator. generateKey ()
위는 8byte의 키를 생성하고 16진수 문자열로 인코딩한다
BytesKeyGenerator
Copy public interface BytesKeyGenerator {
fun generateKey (): ByteArray
fun getKeyLength (): Int
}
///
val keyGenerator: BytesKeyGenerator = KeyGenerators. secureRandom ()
val salt: ByteArray = keyGenerator. generateKey ()
val keyLength: Int = keyGenerator. getKeyLength ()
위 코드는 8byte의 키를 생성한다. 키 길이를 지정하려면 secureRandom()
대신 secureRandom(16)
과 같이 사용한다.
암&복호화
시스템 요소를 암호화 하고 복호화 하는데 사용된다.
TextEncryptor
Copy public interface TextEncryptor {
fun encrypt (text: String ): String
fun decrypt (encryptedText: String ): String
}
///
val salt: String = KeyGenerators. string (). generateKey ()
val textEncryptor: TextEncryptor = Encryptors. text ( "password" , salt)
val encryptedText: String = textEncryptor. encrypt ( "Hello World!" )
val decryptedText: String = textEncryptor. decrypt (encryptedText)
데이터를 문자열로 암호화하고 복호화한다.
BytesEncryptor
Copy public interface BytesEncryptor {
fun encrypt (input: ByteArray ): ByteArray
fun decrypt (encrypted: ByteArray ): ByteArray
}
///
val salt: String = KeyGenerators. string (). generateKey ()
val bytesEncryptor: BytesEncryptor = Encryptors. standard ( "password" , salt)
val encryptedBytes: ByteArray = bytesEncryptor. encrypt ( "Hello World!" . toByteArray ())
val decryptedBytes: ByteArray = bytesEncryptor. decrypt (encryptedBytes)
데이터를 바이트 배열로 암호화하고 복호화한다.
더 강력한 암호화를 위해서는 Encryptors.stronger(password, salt)
를 사용한다.
Last updated 9 months ago