2014-09-17 3 views
1

내 비밀 키를 저장하려면 아래에 스냅 코드가 있습니다.비밀 키의 핵심 자료가 16 진수로 인코딩해야합니까? (Java)

저장하기 전에 왜 16 진수 형식으로 키를 인코딩해야합니까?

아래의 두 가지 스냅 코드의 차이점은 무엇입니까?

스냅 코드 1

public static void saveKey(SecretKey key, File file) throws IOException { 
    byte[] encoded = key.getEncoded(); 
    char[] hex = Hex.encodeHex(encoded); 
    String data = String.valueOf(hex); 
    FileUtils.writeStringToFile(file, data); 
} 

스냅 코드 2

public static void saveKey(SecretKey key, File file) throws IOException { 
    byte[] encoded = key.getEncoded(); 
    FileUtils.writeStringToFile(file, new String(encoded)); 
} 
+2

모든 '바이트'가 합리적인 문자열을 만드는 것은 아닙니다. –

+2

String은 2 진 데이터의 컨테이너가 아닙니다. 나 후에 반복해라. 문자열은 바이너리 데이터의 컨테이너가 아닙니다. – EJP

답변

1

제대로 진수로 인코딩 된 문자열로 파일에 어떤 비밀 키를 기록 1 스냅 코드입니다. 항상 되돌릴 수 있습니다.

스냅 코드 2은 전혀 좋지 않습니다. key을 지원하는 바이트를 플랫폼의 기본 charset의 유효한 바이트 시퀀스에 의존합니다. 그렇지 않은 경우 동작은 정의되지 않습니다. 즉 반환되는 문자열은 원래 바이트 시퀀스로 되돌릴 수 없습니다.

+0

다른 코덱을 사용할 수 있습니까? 또는 16 진수로 인코딩 된 형식이어야합니까? – Ashkandi

+1

가능합니다. 파일이 텍스트 여야한다면 base64가 옵션입니다. 파일이 텍스트 일 ​​필요가 없다면 바이트 배열을 작성하고 문자열 항목을 완전히 삭제하십시오. 나는 약간의 비밀 키가 어떤 보호 장치없이 디스크에 쓰여지는 것에 조금 걱정하고 있습니다. ... –

+0

@Andy Brown. 감사합니다. 비밀 키에 대해서는 디스크에 저장하기 전에 다른 마스터 키로 암호화합니다. – Ashkandi