在KeyStore.load()中使用日语密码会导致java.io.IOException:密钥库被篡改,或者密码不正确

我使用以下方法创建了密钥库:

keytool -genkey -keystore myKeyStore -alias myself

我提供的密码是日语,即“ myPasswordは”
我正在使用以下代码来加载密钥库文件

String KEYSTORE_FILE="C:/myKeyStore";//Path to the keystore file on disk.
PASSWORD="myPasswordは";//Password

KeyStore.getInstance("JKS").load(new FileInputStream(KEYSTORE_FILE),PASSWORD.toCharArray());

上面引发了以下异常:
java.io.IOException:密钥库被篡改,或者密码不正确.

如果我使用英文密码创建密钥库,并在代码中使用相同的密码,那么它将正常工作.

最初,我使用以下命令创建了密钥库:
keytool -genkey -keystore myKeyStore -alias mks
这将提示我输入我作为myPasswordは输入的密码,然后输入后续详细信息.在这种情况下,代码将生成上述异常.

有趣的是,如果我使用以下命令创建密钥库:
keytool -genkey -keystore myKeyStore-别名mks -storepass myPasswordは
然后我上面给出的代码可以正常工作.我正在使用linux.

解决方法:

好了,从描述中我想控制台不会按预期处理Unicode字符.您可以尝试使用PowerShell或通过执行chcp 65001命令尝试将cmd.exe的代码页更改为UTF-8(请注意,这会扭曲控制台的显示行为,但可以正确接受输入).

上一篇:java-由于索引的不透明部分中的字符非法,因此无法使用路径加载密钥库类型JKS


下一篇:java-使用JKS密钥库通过Ganymed SSH进行公钥身份验证