我使用以下方法创建了一个密钥库:
keytool -genkey -keystore myKeyStore -alias我自己
我给的密码是日文,即“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 -alias mks -storepass myPasswordは 那么我上面给出的代码工作正常。我正在使用linux。
答案 0 :(得分:2)
好吧,根据描述,我猜控制台不会按预期处理unicode字符。您可以尝试使用PowerShell或尝试通过执行chcp 65001
命令将cmd.exe的代码页更改为UTF-8(请注意,这会扭曲控制台显示行为,但它会正确接受输入)。
答案 1 :(得分:2)
此问题的根本原因是keytool实用程序无法正确解码在提示符下输入的非ascii密码。
这是一个已知问题,可在http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=53546691146578386c644cb554976?bug_id=6433238
找到因此,解决方案是创建一个密钥库,密码未在提示符下输入。这可以通过以下方式完成:
keytool -genkey -keystore myKeyStore -alias myAlias -storepassすてきなパスワード