keycloak
公開メンバ関数 | 静的公開変数類 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.credential.hash.Pbkdf2PasswordHashProvider クラス
org.keycloak.credential.hash.Pbkdf2PasswordHashProvider の継承関係図
Inheritance graph
org.keycloak.credential.hash.Pbkdf2PasswordHashProvider 連携図
Collaboration graph

公開メンバ関数

 Pbkdf2PasswordHashProvider (String providerId, String pbkdf2Algorithm, int defaultIterations)
 
 Pbkdf2PasswordHashProvider (String providerId, String pbkdf2Algorithm, int defaultIterations, int derivedKeySize)
 
boolean policyCheck (PasswordPolicy policy, CredentialModel credential)
 
void encode (String rawPassword, int iterations, CredentialModel credential)
 
String encode (String rawPassword, int iterations)
 
boolean verify (String rawPassword, CredentialModel credential)
 
void close ()
 

静的公開変数類

static final int DEFAULT_DERIVED_KEY_SIZE = 512
 

非公開メンバ関数

int keySize (CredentialModel credential)
 
String encode (String rawPassword, int iterations, byte[] salt, int derivedKeySize)
 
byte [] getSalt ()
 
SecretKeyFactory getSecretKeyFactory ()
 

非公開変数類

final String providerId
 
final String pbkdf2Algorithm
 
final int defaultIterations
 
final int derivedKeySize
 

詳解

著者
Kunal Kerkar

構築子と解体子

◆ Pbkdf2PasswordHashProvider() [1/2]

org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.Pbkdf2PasswordHashProvider ( String  providerId,
String  pbkdf2Algorithm,
int  defaultIterations 
)
inline
45  {
47  }
static final int DEFAULT_DERIVED_KEY_SIZE
Definition: Pbkdf2PasswordHashProvider.java:43
final String pbkdf2Algorithm
Definition: Pbkdf2PasswordHashProvider.java:40
final String providerId
Definition: Pbkdf2PasswordHashProvider.java:38
final int defaultIterations
Definition: Pbkdf2PasswordHashProvider.java:41

◆ Pbkdf2PasswordHashProvider() [2/2]

org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.Pbkdf2PasswordHashProvider ( String  providerId,
String  pbkdf2Algorithm,
int  defaultIterations,
int  derivedKeySize 
)
inline
48  {
49  this.providerId = providerId;
53  }
final int derivedKeySize
Definition: Pbkdf2PasswordHashProvider.java:42
final String pbkdf2Algorithm
Definition: Pbkdf2PasswordHashProvider.java:40
final String providerId
Definition: Pbkdf2PasswordHashProvider.java:38
final int defaultIterations
Definition: Pbkdf2PasswordHashProvider.java:41

関数詳解

◆ close()

void org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.close ( )
inline

org.keycloak.provider.Providerを実装しています。

107  {
108  }

◆ encode() [1/3]

void org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.encode ( String  rawPassword,
int  iterations,
CredentialModel  credential 
)
inline

org.keycloak.credential.hash.PasswordHashProviderを実装しています。

68  {
69  if (iterations == -1) {
70  iterations = defaultIterations;
71  }
72 
73  byte[] salt = getSalt();
74  String encodedPassword = encode(rawPassword, iterations, salt, derivedKeySize);
75 
76  credential.setAlgorithm(providerId);
77  credential.setType(UserCredentialModel.PASSWORD);
78  credential.setSalt(salt);
79  credential.setHashIterations(iterations);
80  credential.setValue(encodedPassword);
81  }
void encode(String rawPassword, int iterations, CredentialModel credential)
Definition: Pbkdf2PasswordHashProvider.java:68
final int derivedKeySize
Definition: Pbkdf2PasswordHashProvider.java:42
final String providerId
Definition: Pbkdf2PasswordHashProvider.java:38
byte [] getSalt()
Definition: Pbkdf2PasswordHashProvider.java:123
final int defaultIterations
Definition: Pbkdf2PasswordHashProvider.java:41

◆ encode() [2/3]

String org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.encode ( String  rawPassword,
int  iterations 
)
inline

org.keycloak.credential.hash.PasswordHashProviderを実装しています。

84  {
85  if (iterations == -1) {
86  iterations = defaultIterations;
87  }
88 
89  byte[] salt = getSalt();
90  return encode(rawPassword, iterations, salt, derivedKeySize);
91  }
void encode(String rawPassword, int iterations, CredentialModel credential)
Definition: Pbkdf2PasswordHashProvider.java:68
final int derivedKeySize
Definition: Pbkdf2PasswordHashProvider.java:42
byte [] getSalt()
Definition: Pbkdf2PasswordHashProvider.java:123
final int defaultIterations
Definition: Pbkdf2PasswordHashProvider.java:41

◆ encode() [3/3]

String org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.encode ( String  rawPassword,
int  iterations,
byte []  salt,
int  derivedKeySize 
)
inlineprivate
110  {
111  KeySpec spec = new PBEKeySpec(rawPassword.toCharArray(), salt, iterations, derivedKeySize);
112 
113  try {
114  byte[] key = getSecretKeyFactory().generateSecret(spec).getEncoded();
115  return Base64.encodeBytes(key);
116  } catch (InvalidKeySpecException e) {
117  throw new RuntimeException("Credential could not be encoded", e);
118  } catch (Exception e) {
119  throw new RuntimeException(e);
120  }
121  }
SecretKeyFactory getSecretKeyFactory()
Definition: Pbkdf2PasswordHashProvider.java:130
final int derivedKeySize
Definition: Pbkdf2PasswordHashProvider.java:42

◆ getSalt()

byte [] org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.getSalt ( )
inlineprivate
123  {
124  byte[] buffer = new byte[16];
125  SecureRandom secureRandom = new SecureRandom();
126  secureRandom.nextBytes(buffer);
127  return buffer;
128  }

◆ getSecretKeyFactory()

SecretKeyFactory org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.getSecretKeyFactory ( )
inlineprivate
130  {
131  try {
132  return SecretKeyFactory.getInstance(pbkdf2Algorithm);
133  } catch (NoSuchAlgorithmException e) {
134  throw new RuntimeException("PBKDF2 algorithm not found", e);
135  }
136  }
final String pbkdf2Algorithm
Definition: Pbkdf2PasswordHashProvider.java:40

◆ keySize()

int org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.keySize ( CredentialModel  credential)
inlineprivate
98  {
99  try {
100  byte[] bytes = Base64.decode(credential.getValue());
101  return bytes.length * 8;
102  } catch (IOException e) {
103  throw new RuntimeException("Credential could not be decoded", e);
104  }
105  }

◆ policyCheck()

boolean org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.policyCheck ( PasswordPolicy  policy,
CredentialModel  credential 
)
inline

org.keycloak.credential.hash.PasswordHashProviderを実装しています。

56  {
57  int policyHashIterations = policy.getHashIterations();
58  if (policyHashIterations == -1) {
59  policyHashIterations = defaultIterations;
60  }
61 
62  return credential.getHashIterations() == policyHashIterations
63  && providerId.equals(credential.getAlgorithm())
64  && derivedKeySize == keySize(credential);
65  }
final int derivedKeySize
Definition: Pbkdf2PasswordHashProvider.java:42
int keySize(CredentialModel credential)
Definition: Pbkdf2PasswordHashProvider.java:98
final String providerId
Definition: Pbkdf2PasswordHashProvider.java:38
final int defaultIterations
Definition: Pbkdf2PasswordHashProvider.java:41

◆ verify()

boolean org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.verify ( String  rawPassword,
CredentialModel  credential 
)
inline

org.keycloak.credential.hash.PasswordHashProviderを実装しています。

94  {
95  return encode(rawPassword, credential.getHashIterations(), credential.getSalt(), keySize(credential)).equals(credential.getValue());
96  }
void encode(String rawPassword, int iterations, CredentialModel credential)
Definition: Pbkdf2PasswordHashProvider.java:68
int keySize(CredentialModel credential)
Definition: Pbkdf2PasswordHashProvider.java:98

メンバ詳解

◆ DEFAULT_DERIVED_KEY_SIZE

final int org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.DEFAULT_DERIVED_KEY_SIZE = 512
static

◆ defaultIterations

final int org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.defaultIterations
private

◆ derivedKeySize

final int org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.derivedKeySize
private

◆ pbkdf2Algorithm

final String org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.pbkdf2Algorithm
private

◆ providerId

final String org.keycloak.credential.hash.Pbkdf2PasswordHashProvider.providerId
private

このクラス詳解は次のファイルから抽出されました: