该PublicKey.getEncoded(),返回包含的SubjectPublicKeyInfo(X.509)格式的公钥的字节数组,我如何将其转换为RSA公共密钥编码?
谁能帮助我理解MarshalPKIXPublicKey()和MarshalPKCS1PublicKey()之间的区别?
根据评论:// MarshalPKIXPublicKey将公钥序列化为DER编码的PKIX格式.
// MarshalPKCS1PublicKey将RSA公钥转换为PKCS#1,ASN.1 DER表单.
什么是DER编码的PKIX格式?
谢谢
我正在尝试以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应用程序.为此,我必须以格式生成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或任何第三方生成它的方法.
我有以下格式的公钥
-----BEGIN PUBLIC KEY-----
xxxxxxxx
-----END PUBLIC KEY-----
我需要将其转换为以下格式
-----BEGIN RSA PUBLIC KEY-----
xxxxxxxxx
-----END RSA PUBLIC KEY-----
基本上,问题是我正在使用用Java编写的第三方库.
第三方库使用Java类"RSAPublicKeySpec"从String生成类型为RSAPublicKey的实例.
我提供给第三方库的字符串来自一个文件,格式如下:
-----BEGIN PUBLIC KEY-----
xxxxxxxx
-----END PUBLIC KEY-----
用例:我有一个用例,其中客户端生成私钥和公钥,将 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 #1或X.509对 key 进行编码。 …
java ×4
rsa ×4
pkcs#1 ×2
public-key ×2
android ×1
bouncycastle ×1
cryptography ×1
go ×1
java-ee ×1
logcat ×1
openssl ×1
pkix ×1
x509 ×1