Java RSA中的零公共指数
我正在开发一个OSGi插件包,它对字符串执行加密。字符串本身使用AES加密。我正在用RSA加密AES密钥。所有这些都在我的单元测试中完美地工作 当我将插件部署到Karaf中时,目前还没有尝试过任何其他OSGi容器,加密密钥的结果是一堆零字节和最后一个1字节。没有抛出异常。一切看起来都很正常,只是当我使用调试器时,我发现RSA公钥密码使用的是一个密钥规范,其中公共指数的值为零。这显然毫无意义,输出主要是零也不奇怪 有人能提出为什么会发生这种情况吗 添加一些代码片段:Java RSA中的零公共指数,java,encryption,rsa,blueprint-osgi,karaf,Java,Encryption,Rsa,Blueprint Osgi,Karaf,我正在开发一个OSGi插件包,它对字符串执行加密。字符串本身使用AES加密。我正在用RSA加密AES密钥。所有这些都在我的单元测试中完美地工作 当我将插件部署到Karaf中时,目前还没有尝试过任何其他OSGi容器,加密密钥的结果是一堆零字节和最后一个1字节。没有抛出异常。一切看起来都很正常,只是当我使用调试器时,我发现RSA公钥密码使用的是一个密钥规范,其中公共指数的值为零。这显然毫无意义,输出主要是零也不奇怪 有人能提出为什么会发生这种情况吗 添加一些代码片段: public static C
public static Cipher createRsaCipher(final boolean keyTypePublic, final int mode, final KeySpec keySpec) throws GeneralSecurityException
{
final KeyFactory kfpri = KeyFactory.getInstance(RSA);
final Cipher result = Cipher.getInstance(RSA);
result.init(mode, keyTypePublic ? kfpri.generatePublic(keySpec) : kfpri.generatePrivate(keySpec));
return result;
}
private static Cipher createPublicKeyEncryptionCipher(final URL key) throws IOException, GeneralSecurityException {
try (InputStream stream = key.openStream()) {
final byte[] encodedKey = readPublicKeyBytes(stream);
final X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
return CipherFactory.createRsaCipher(true, Cipher.ENCRYPT_MODE, publicKeySpec);
}
}
private static byte[] encrypt(final byte[] source, Cipher cipher) throws GeneralSecurityException {
final int bytes = source.length;
final int outputSize = cipher.getOutputSize(bytes);
final byte[] buffer = new byte[outputSize];
int resultLength = 0;
final int n = cipher.doFinal(source, 0, bytes, buffer, 0);
resultLength += n;
final byte[] result = new byte[resultLength];
System.arraycopy(buffer, 0, result, 0, resultLength);
return result;
}
openssl rsa -in private.pem -pubout -outform DER -out public.der
more private.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA6LhJ1xCjo2mOMYO3Km5rk+1jpSUgeFLX296apNHgHVb7e9H/
.....etc...........
o6ZYdYg05ubEu+jRQkdudbA/7AXLwYOzGtzhla7ow5QhYcWtJEOwX4U=
-----END RSA PRIVATE KEY-----
我们无法访问您的系统Phasmid,您也没有提供任何代码。我们该怎么回答这个问题呢?如果你愿意,我可以添加代码,但是,正如我所说,它在单元测试中工作得很好。我希望有人能从个人经历中认识到这个问题。如果我提供了代码,你需要看到多少?与RSA密钥生成和加密有关的任何内容。我添加了从公钥创建密码的方法,使用所述密码对源进行加密的方法,我用于以DER格式输出公钥的命令,最后是私钥本身的编辑形式。让我知道,如果有其他的东西,将有助于张贴。谢谢你,CipherFactory.CreateSacpher?这个定义在哪里?