2014-01-28 5 views
0

특히 웹 서비스 등에서 비밀번호를 저장하는 데 Java Keystore를 사용할 수 있습니까? SSL 키 저장에 대한 온라인 정보를 찾았지만 이것이 나의 필요를 과소 평가합니다.비밀번호 용 Java 키 스토어

답변

1

예, 키 저장소 유형에 따라 KeyStoreSecretKeyEntry을 만들 수 있습니다. 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 블록. 그렇지 않으면 목표 위반에서 사용 된 것과 같은 메모리 스크래퍼가 키를 잡을 가능성이 더 큽니다.

+0

자습서 링크 또는 샘플 코드 조각? –

+0

@DaSh 항목에 대한 작업 방법을 보여주는 코드를 추가했습니다. 다행히도 키 저장소를로드하고 저장하는 방법을 이미 이해하고 마스터 암호를 묻는 메시지를 안전하게 표시하고 문자 배열의 다른 암호를 인 코드/디코딩 할 수 있기를 바랍니다. 이미 포함 된 코드는이 형식에서 다루기 힘듭니다. – erickson