public class PBEKeySpec extends Object implements KeySpec
该密码可以被看作是某种原始密钥材料,使用它的加密机制从该密钥材料获得加密密钥。
不同的PBE机制可能会消耗每个密码字符的不同位。 例如,在定义的PBE机构PKCS #5着眼于仅低阶8个的每个字符的比特,而PKCS#12着眼于每个字符的所有16位。
您可以通过创建相应密钥工厂的实例将密码字符转换为PBE密钥。 例如,PKCS#5的秘密密钥工厂将仅从每个密码字符的低位8位构造一个PBE密钥,而PKCS#12的秘密密钥工厂将占用每个字符的所有16位。
还要注意,这个类将密码存储为char数组而不是String
对象(这似乎更合乎逻辑),因为String类是不可变的,当不再需要存储在其中的密码时,没有办法覆盖其内部值。 因此,该类将该密码作为char数组请求,因此在完成后可以被覆盖。
SecretKeyFactory
, PBEParameterSpec
Constructor and Description |
---|
PBEKeySpec(char[] password)
使用密码的构造方法。
|
PBEKeySpec(char[] password, byte[] salt, int iterationCount)
构造函数采用密码,盐,迭代计数,生成固定密钥大小的PBE密码的PBEKey。
|
PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
构造函数,它使用密码,盐,迭代计数和待导出密钥长度来生成可变密钥大小的PBE密码的PBEKey。
|
Modifier and Type | Method and Description |
---|---|
void |
clearPassword()
清除密码的内部副本。
|
int |
getIterationCount()
返回迭代计数,如果未指定则返回0。
|
int |
getKeyLength()
返回要导出的密钥长度,如果未指定则返回0。
|
char[] |
getPassword()
返回密码的副本。
|
byte[] |
getSalt()
如果没有指定,则返回salt的副本。
|
public PBEKeySpec(char[] password)
注意: password
被存储在新的PBEKeySpec
对象之前被克隆。
password
- 密码。
public PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
password
。
注意: password
和salt
在被存储在新的PBEKeySpec
对象之前被克隆。
password
- 密码。
salt
- 盐。
iterationCount
- 迭代计数。
keyLength
- 要导出的密钥长度。
NullPointerException
- 如果
salt
为空。
IllegalArgumentException
- 如果
salt
为空,即0长度,
iterationCount
或
keyLength
不为正。
public PBEKeySpec(char[] password, byte[] salt, int iterationCount)
password
。
注意: password
和salt
在被存储在新的PBEKeySpec
对象之前被克隆。
password
- 密码。
salt
- 盐。
iterationCount
- 迭代计数。
NullPointerException
- 如果
salt
为空。
IllegalArgumentException
- 如果
salt
为空,即0长度,或
iterationCount
不为正。
public final void clearPassword()
public final char[] getPassword()
注意:此方法返回密码的副本。 呼叫者有责任在不再需要密码信息后将其清除。
IllegalStateException
- 如果通过调用
clearPassword
方法清除了密码。
public final byte[] getSalt()
注意:此方法应返回盐的副本。 呼叫者有责任在不再需要盐信息后将其清除掉。
public final int getIterationCount()
public final int getKeyLength()
注意:这用于指示可变密钥大小密码对密钥长度的偏好。 实际的密钥大小取决于每个提供者的实现。