我知道已经有一些关于此错误的帖子,但我找不到适合我的问题的答案:
我使用以下命令创建了一个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
。
请注意,我尝试使用普通密码(例如:传递),这很有效,所以我想这里的问题与我在密码中使用的特殊字符有关。
发生了什么,我该如何解决这个问题?
答案 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代码中,它将起作用。