Keytool错误:Keystore被篡改...特殊字符

时间:2014-12-29 10:19:43

标签: java encoding keystore keytool

我知道已经有一些关于此错误的帖子,但我找不到适合我的问题的答案:

我使用以下命令创建了一个AES密钥:

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

然后我尝试从java代码访问密钥库:

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 个答案:

答案 0 :(得分:14)

此问题的原因是美元符号与bash命令行的组合。

基本上&#34; $ c&#34;用名称为&#34; c&#34;的变量的内容替换。不幸的是,这个名称没有变量,因此它被替换为空字符串。

您可以使用single quotes来避免变量替换。看到差异:

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

如果您使用密码&#34; a#b<d>&#34;在你的java代码中,它将起作用。