2014-09-30 9 views
0

에서 일반 텍스트에 암호를 얻을 내가 수행하여 키 스토어에서 사용자 암호를 기반으로의 SecretKey를 저장하려면 다음암호으로부터 SecretKey를 생성하고 그 키

// load KeyStore 

static byte[] salt = // for learning purposes 
        { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c, 
         (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 }; 

String alias = "aeskey"; 
char[] password = "password".toCharArray(); 
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256); 
SecretKey tmp = factory.generateSecret(spec); 
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES/CBC/PKCS5Padding"); 
Entry aesentry = new KeyStore.SecretKeyEntry(secret); 
store.setEntry(alias, aesentry, protParam); 

지금 내가에서의 SecretKey를 얻을 수 있습니다 키 저장소 :

SecretKey에서 초기화 암호를 얻는 방법은 무엇입니까?

답변

2

KeySpec에서 원래 암호를 가져올 수 없습니다. KeySpec을 만들기 위해 암호와 소금의 일부 바이트가 선택됩니다.

  1. 암호화를 사용하여의 SecretKey
  2. Cipher로 인스턴스를 생성 생성 비밀번호와 소금
  3. 를 사용하여의 KeySpec 생성 : 당신은 암호화 및 텍스트를 해독하려는 경우, 다음을 수행해야 이 암호를 사용하는 본문

이제 암호와 소금을 다른 사람과 오프라인으로 공유한다고 가정 해보십시오. 그런 다음 이들을 사용하여 암호화 된 텍스트의 암호를 해독 할 수 있습니다.

자세한 내용은 this을 참조하십시오.

+0

KeyStore를 사용하여 일련의 초기 암호를 유지하는 것으로 간주했습니다. 이제 나는 이것이 잘못된 접근이라고 생각한다. 단일 초기 암호를 사용하여 다른 초기 암호를 일반 텍스트로 암호화/암호 해독 할 수 있습니다. 결과물은 여러 번 복제 된 bytearrays입니다. 파일에 넣어야합니까? 아니면이를 달성하기위한 더 좋은 방법을 제안 하시겠습니까? –

+0

유스 케이스에 따라 다릅니다. 상자에서 꺼내기 위해 [jasypt] (http://www.jasypt.org/)를보십시오. 그런 다음 암호화 된 항목을 파일, 데이터베이스 등에 저장하도록 선택할 수 있습니다. – Aritra

+0

Jasypt에게 감사드립니다.이 방법이 가장 적합 할 것입니다. –