rea*_*404 7 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
Run Code Online (Sandbox Code Playgroud)
然后我尝试从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);
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个IOException : keystore was tampered with or password was incorrect.
请注意,我尝试使用普通密码(例如:传递),这很有效,所以我想这里的问题与我在密码中使用的特殊字符有关.
发生了什么,我该如何解决这个问题?
Omi*_*ron 14
这个问题的原因是美元符号与bash命令行的组合.
基本上,"$ c"被替换为名为"c"的变量的内容.不幸的是,这个名称没有变量,因此它被替换为空字符串.
您可以使用单引号来避免变量替换.看到不同:
$ echo "a#b$c<d>"
a#b<d>
$ echo 'a#b$c<d>'
a#b$c<d>
Run Code Online (Sandbox Code Playgroud)
如果您a#b<d>在java代码中使用密码" ",它将起作用.