java - Keytool 错误 : Keystore was tampered with. .. 特殊字符

标签 java encoding keystore keytool

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

我使用以下命令创建了一个 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/

相关文章:

java - 我与之交谈的网络服务器更新了它的 SSL 证书,现在我的应用程序无法与之交谈

java - 从子上下文引用在父上下文中创建的 Spring Singletons

encoding - ASCII 兼容和不兼容字符编码

java - 在 "x"家庭中生 child

python - 如何在 python 中规范化 iso-8859-15 转换的 unicode 编码?

java - 在 FileWriter - Java 中设置编码的替代方法

ssl - 没有用于 MQ channel 的 SSL 或 TLS 证书(从终端运行 - Windows 10)

keystore - 使用keytool生成 "expired"SSL证书

java - JDBC ClassNotFoundException 异常

java - 字符串数组的 String.Split() 第二个值未保存到新变量