【发布时间】:2014-07-04 17:06:22
【问题描述】:
在亚马逊 Linux 中运行我的 jar 后,我遇到了这个特殊错误。它在我的 OsX 中运行良好。我在两台机器上使用相同的公钥和私钥。唯一的区别是 java 版本是
我制作、测试和编译脚本的机器:
Java(TM) SE 运行时环境(内部版本 1.6.0_65-b14-462-11M4609)
亚马逊服务器:
OpenJDK 运行时环境 (amzn-2.4.7.1.40.amzn1-x86_64 u55-b13)
这是导致错误的脚本部分:
public PublicKey getPublicKey(String _file)
throws
NoSuchAlgorithmException,
NoSuchProviderException,
InvalidKeySpecException,
IOException
{
X509EncodedKeySpec _spec = new X509EncodedKeySpec(_getFileContents(_file));
KeyFactory _keyFactory = KeyFactory.getInstance(this._keyFactoryAlgo, this._provider);
this._publicKey = _keyFactory.generatePublic(_spec);
return this._publicKey;
}
获取文件内容:
private byte[] _getFileContents(String _fileName) throws IOException
{
File _file = new File(_fileName);
FileInputStream _fileStream = new FileInputStream(_file);
byte[] _contents = new byte[(int) _file.length()];
_fileStream.read(_contents);
if(_fileStream != null)
{
_fileStream.close();
_fileStream = null;
}
return _contents;
}
这是完整的错误信息:
java.security.spec.InvalidKeySpecException: encoded key spec not recognised
at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:328)
at xxx.CryptKey.getPublicKey(CryptKey.java:167)
at xxx.CryptSession.encryptWithPublicKey(CryptSession.java:316)
at xxx.Crypt.encrypt(Crypt.java:57)
at snippet.Snippet.main(Snippet.java:201)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
【问题讨论】:
-
可能是因为两个不同的平台有不同的编码?将您的字符串转换为 byte[] 可能会出现问题。
-
有什么我可以确认的吗?或者也许更新一个或另一个?
-
我认为您可以使用
Charset.defaultCharset()来检查编码。 -
我都得到了
[*]DefaultCharset:UTF-8 -
getFileContents()是如何实现的?这里有很多个加密问题实际上是关于 I/O 和正确读取文件或输入流 (im)。
标签: java encryption amazon-web-services bouncycastle public-key-encryption