2014-12-29 4 views
2

... 위조했다, 그러나 나는 내 문제 맞는 답을 찾을 수 없습니다 : 내가 가진 AES 키를 생성Keytool을 오류가 : 키 저장소는 내가이 오류에 대한 이미 몇 게시물이 알고 특수 문자

을 명령 다음

keytool -genseckey -alias TEST -keyalg AES -keysize 128 -storepass "a#b$c<d>" 
-storetype JCEKS -keystore /usr/my/path/test.jck 

그때 자바 코드에서 키 저장소에 액세스하려고 :

String password = "a#b$c<d>"; 

char[] passwordChars= password.toCharArray(); 

// loading the file containing the key 
InputStream inputStreamFichierCle; 
try { 
    inputStreamFichierCle = new FileInputStream(filePath); 
    keyStore.load(inputStreamFichierCle, passwordChars); 
} 

을 그리고 거기에 내가 IOException : keystore was tampered with or password was incorrect를 얻을.

정상적인 암호 (예 : 통과)로 시도했는데 완벽하게 작동하므로 여기에있는 문제는 내 암호에서 사용하는 특수 문자와 관련이 있습니다.

무슨 일이 벌어지며 어떻게 해결할 수 있습니까?

+1

일반적인 기술은 그 루프 대신에'String.toCharArray()'를 사용하는 것입니다. – EJP

+0

Thx, 게시물을 편집했지만 문제가 해결되지 않았습니다 – realUser404

답변

7

이 문제의 원인은 달러 기호와 bash 명령 줄을 조합 한 것입니다.

기본적으로 "$ c"는 "c"이름의 변수 내용으로 대체됩니다. 불행히도이 이름에는 변수가 없으므로 빈 문자열로 바뀝니다.

single quotes을 사용하여 변수 대체를 피할 수 있습니다. 차이 참조 : 당신이 당신의 자바 코드에 암호 "a#b<d>"를 사용하는 경우

$ echo "a#b$c<d>" 
a#b<d> 
$ echo 'a#b$c<d>' 
a#b$c<d> 

를, 그것은 작동합니다.

+0

깊이 감사드립니다! –

+0

다른 낭비 일로부터 나를 구해 줬어! 고맙습니다! –