0
특히 웹 서비스 등에서 비밀번호를 저장하는 데 Java Keystore를 사용할 수 있습니까? SSL 키 저장에 대한 온라인 정보를 찾았지만 이것이 나의 필요를 과소 평가합니다.비밀번호 용 Java 키 스토어
특히 웹 서비스 등에서 비밀번호를 저장하는 데 Java Keystore를 사용할 수 있습니까? SSL 키 저장에 대한 온라인 정보를 찾았지만 이것이 나의 필요를 과소 평가합니다.비밀번호 용 Java 키 스토어
예, 키 저장소 유형에 따라 KeyStore
에 SecretKeyEntry
을 만들 수 있습니다. SunJCE 프로 바이더는 비밀 키 엔트리를 수용하는 "JCEKS"키 스토어를 구현합니다.
static byte[] getPassword(KeyStore ks, String alias, char[] master)
throws GeneralSecurityException, DestroyFailedException
{
if (!ks.entryInstanceOf(alias, KeyStore.SecretKeyEntry.class))
throw new IllegalArgumentException();
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(master);
try {
KeyStore.SecretKeyEntry e = (KeyStore.SecretKeyEntry) ks.getEntry(alias, pp);
return e.getSecretKey().getEncoded();
}
finally {
pp.destroy();
}
}
static void setPassword(KeyStore ks, String alias, byte[] password, char[] master)
throws GeneralSecurityException, DestroyFailedException
{
SecretKey wrapper = new SecretKeySpec(password, "RAW");
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(wrapper);
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(master);
try {
ks.setEntry(alias, entry, pp);
}
finally {
pp.destroy();
}
}
당신은 내가 A의 PasswordProtection
인스턴스를 destroy()
처럼 그들을 사용하여 수행되는대로 즉시 "제로"암호에주의해야한다 시도 - finally 블록. 그렇지 않으면 목표 위반에서 사용 된 것과 같은 메모리 스크래퍼가 키를 잡을 가능성이 더 큽니다.
자습서 링크 또는 샘플 코드 조각? –
@DaSh 항목에 대한 작업 방법을 보여주는 코드를 추가했습니다. 다행히도 키 저장소를로드하고 저장하는 방법을 이미 이해하고 마스터 암호를 묻는 메시지를 안전하게 표시하고 문자 배열의 다른 암호를 인 코드/디코딩 할 수 있기를 바랍니다. 이미 포함 된 코드는이 형식에서 다루기 힘듭니다. – erickson