相关疑难解决方法(0)

将SubjectPublicKeyInfo格式的公钥转换为RSAPublicKey格式java

该PublicKey.getEncoded(),返回包含的SubjectPublicKeyInfo(X.509)格式的公钥的字节数组,我如何将其转换为RSA公共密钥编码?

java cryptography rsa pkcs#1

9
推荐指数
2
解决办法
2万
查看次数

golang x509.MarshalPKIXPublicKey vs x509.MarshalPKCS1PublicKey()

谁能帮助我理解MarshalPKIXPublicKey()和MarshalPKCS1PublicKey()之间的区别?

根据评论:// MarshalPKIXPublicKey将公钥序列化为DER编码的PKIX格式.

// MarshalPKCS1PublicKey将RSA公钥转换为PKCS#1,ASN.1 DER表单.

什么是DER编码的PKIX格式?

谢谢

rsa go pkix

7
推荐指数
1
解决办法
702
查看次数

在Android中以PKCS#1格式在Android中生成RSA密钥

我正在尝试以Android中的PKCS#1的形式生成RSA公钥.

这里几乎完全重复了这个问题:用Java生成PKCS#1格式的RSA密钥

但作者从未回答过.我经历了答案,但我找不到有用的东西.我得出结论(除非别人有不同的答案),必须使用Bouncy Castle来完成.我与充气城堡唯一的问题实际上是在Android中使用它.我"似乎"正确地导入了jar(我说"似乎"因为我之前从未这样做过,但它是一个相当轻松的过程而且我在Eclipse中没有错误)但是,然后我在log cat中得到一个错误.

03-25 22:25:58.780: E/AndroidRuntime(9171): java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
Run Code Online (Sandbox Code Playgroud)

java android rsa bouncycastle logcat

4
推荐指数
1
解决办法
2725
查看次数

如何以PEM格式生成PKCS#1 RSA密钥?

对不起我的英语,说实话,我对此有一点了解所以请耐心等待.

我正在开发一个将签名请求发送到服务器的Java应用程序.为此,我必须以格式生成PKCS#1 RSA密钥对以PEM进行签名和验证.我尝试过使用OpenSSL v.1.0.1.但生成的公钥是一个X.509 PEM.

这是我用来生成密钥的openssl命令:

私钥:

openssl genrsa -out name_of_private_key.pem 1024
Run Code Online (Sandbox Code Playgroud)

公钥

openssl rsa -in name_of_private_key.pem -pub out > name_of_public_key.pem
Run Code Online (Sandbox Code Playgroud)

我也经历了这个线程,我发现了一个开源JAVA库BouncyCastle:用Java生成PKCS#1格式的RSA密钥

但它说BouncyCastle仅用于PKCS#1 填充而不是编码.

最好是,如果没有其他选项,我正在寻找使用JAVA或任何第三方生成它的方法.

openssl java-ee pkcs#1 key-generator

4
推荐指数
2
解决办法
2万
查看次数

将X509公钥转换为RSA公钥

我有以下格式的公钥

-----BEGIN PUBLIC KEY----- xxxxxxxx -----END PUBLIC KEY-----

我需要将其转换为以下格式

-----BEGIN RSA PUBLIC KEY----- xxxxxxxxx -----END RSA PUBLIC KEY-----

基本上,问题是我正在使用用Java编写的第三方库.

  1. 第三方库使用Java类"RSAPublicKeySpec"从String生成类型为RSAPublicKey的实例.

  2. 我提供给第三方库的字符串来自一个文件,格式如下:

-----BEGIN PUBLIC KEY----- xxxxxxxx -----END PUBLIC KEY-----

  1. 稍微调试一下代码之后,我可以看到,如果我使用java类"X509EncodedKeySpec"来加载这个公钥,我的代码的签名验证部分就能完美运行.但是,由于代码是第三方库,我没有在代码中更改类类型的选项.我需要以某种方式确保我提供给库的输入与"RSAPublicKeySpec"类兼容,以便正确加载公钥.

java rsa x509 public-key

2
推荐指数
1
解决办法
5333
查看次数

RSA 我应该使用 X.509 还是 PKCS #1

用例:我有一个用例,其中客户端生成私钥和公钥,将 base 64 编码的公钥发送到服务器。

在服务器端,我将使用此公钥加密消息并将加密消息发送到客户端,客户端使用其私钥解密。商定的算法是“RSA”。

问题出在服务器端,我看到某些密钥正在X509EncodedKeySpec用作密钥规范

byte[] publicBytes = Base64.decodeBase64(base64EncodedPubKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Run Code Online (Sandbox Code Playgroud)

虽然有些键会使用以下方法抛出异常 ( Caused by: java.security.InvalidKeyException: IOException: algid parse error, not a sequence)X509EncodedKeySpec但可以使用RSAPublicKeySpec

byte[] publicBytes = Base64.decodeBase64(base64EncodedPubKey);
org.bouncycastle.asn1.pkcs.RSAPublicKey.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.RSAPublicKey.getInstance(publicBytes);
BigInteger modulus = pkcs1PublicKey.getModulus();
BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Run Code Online (Sandbox Code Playgroud)

所以,我开始理解的是客户端和服务器需要同意是否使用: PKCS #1X.509对 key 进行编码。 …

java public-key-encryption public-key

1
推荐指数
1
解决办法
3001
查看次数