我知道已经有一些关于这个错误的帖子,但我找不到适合我的问题的答案:
我使用以下命令创建了一个 AES key :
keytool -genseckey -alias TEST -keyalg AES -keysize 128 -storepass "a#b$c<d>"
-storetype JCEKS -keystore /usr/my/path/test.jck
然后我尝试从 java 代码访问 keystore :
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
。
请注意,我尝试使用普通密码(例如:pass)并且效果很好,所以我猜这里的问题与我在密码中使用的特殊字符有关。
这是怎么回事,我该如何解决?
最佳答案
此问题的原因是美元符号与 bash 命令行结合使用。
基本上“$c”被一个名为“c”的变量的内容所取代。不幸的是,没有这个名字的变量,所以它被替换为一个空字符串。
您可以使用 single quotes 来避免变量替换.查看区别:
$ echo "a#b$c<d>"
a#b<d>
$ echo 'a#b$c<d>'
a#b$c<d>
如果您在您的 Java 代码中使用密码“a#b<d>
”,它将起作用。
关于java - Keytool 错误 : Keystore was tampered with. .. 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686987/