☕
spring-security-cryptoのSCryptPasswordEncoderを使ってパスワードを暗号化する
SCryptPasswordEncoderを使ってパスワードを暗号化する
依存性追加
build.gradle
// crypto
implementation 'org.springframework.security:spring-security-crypto'
java.lang.NoClassDefFoundError: org/bouncycastle/crypto/generators/SCrypt
spring-security-crypto
のみimportしてSCryptPasswordEncoder
を使おうとするとエラーが出る
java.lang.NoClassDefFoundError: org/bouncycastle/crypto/generators/SCrypt
// crypto
implementation 'org.springframework.security:spring-security-crypto'
implementation 'org.bouncycastle:bcprov-jdk18on:1.77' // <- 追記
SCryptPasswordEncoderを利用した簡単なコード
AuthService.java
public void signUp(Signup signup) {
if (userRepository.findByEmail(signup.getEmail()).isPresent()) {
throw new EmailAlreadyExistsException();
}
SCryptPasswordEncoder encoder = new SCryptPasswordEncoder(
2, 8, 1, 32, 64
);
String encodedPassword = encoder.encode(signup.getPassword());
User user = User.builder()
.name(signup.getName())
.email(signup.getEmail())
.password(encodedPassword)
.build();
userRepository.save(user);
}
SCryptPasswordEncoderのParameter
-
cpuCost
– 1以上の2の倍数、デフォルトは16
-
memoryCost
– デフォルト8
-
parallelization
– デフォルト1
、現在は具現化されてない -
keyLength
– デフォルト32
-
saltLength
– デフォルト16
.
Discussion