- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
从由 openssl ec -pubout ...< 生成的 PEM 文件创建
。相同的代码适用于 RSA key 。我做错了什么?java.security.PublicKey
时,我收到 InvalidKeyException: invalid key format
/
公钥内容如下:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAG0FCGgyhUeJYUXeXoiKOU4GiyTORZ
U9+OpadxpVWqPbNoSNcfK7Ea13eWOKXlUe22v4Clce3t5nrCEBkwqhhe/g==
-----END PUBLIC KEY-----
使用 OpenSSL 生成 EC key :
openssl ecparam -genkey -out private_key.pem -outform PEM -name prime256v1
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt
openssl ec -in private_key.pem -inform PEM -out public_key.pem -outform PEM -pubout
(我已经尝试了 conv_form 和 param_enc 的不同设置)
Java代码:
KeyFactory kf = KeyFactory.getInstance("EC");
byte[] privEncoded = ... // read from private_key.der file
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privEncoded);
PrivateKey privKey = kf.generatePrivate(privSpec);
byte[] pubEncoded = .... // read from public_key.pem file
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubEncoded);
PublicKey pubKey = kf.generatePublic(pubSpec); // <-- InvalidKeyException
编辑:与我上面所说的相反,在使用新生成的 PEM 尝试读取 RSA 公钥时,现在也会失败。另外,加密然后解密也会失败。按照 GregS 的建议,从 PEM 中删除 BEGIN 和 END 行并将 Base64 转换为字节,解决了这个问题!
最佳答案
Java不支持所谓的“PEM”格式。您必须以 openssl 的“DER”格式保存数据,或者删除第一行和最后一行并在 Java 程序中解码 base64。请参阅javax.xml.bind.DataTypeConverter.parseBase64Binary从 Base64 转换为字节。
关于java - 从 openssl ec 在 Java 中创建 PublicKey 时出现 InvalidKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26630570/
我只有一个PublicKey字符串,如何获取PublicKey指纹?我有一些想法形式 https://go-review.googlesource.com/c/crypto/+/32814 , 但我不
在使用 secp256k1 曲线执行椭圆曲线加密时,我注意到虽然代码和测试用例在 Android Studio IDE 上编译,但它们不会在 android 设备上编译,因为曲线未在移动设备使用的 j
我有一个 rsa.PublicKey,它由结构中的模数和公共(public)指数组成。我想验证用该 key 签名的 ssh.Signature,我想如果我有 ssh.PublicKey 我可以调用 V
我正在尝试将 PublicKey 转换为 String,但我不知道如何正确地进行。以下代码没有给我正确的 key ,那么如何转换呢? byte[] publicKeyBytes = userKeys.
我注意到核心 .NET 程序集具有 PublicKey = 00000000000000000400000000000000。不仅比 sn.exe 允许生成的那些更短(最少 384 位),而且它还有很
我已经使用命令 ssh keygen 创建了 ssh key 并且我已将公钥添加到我的 bitbucket 帐户,然后我也将 key 添加到了 ssh 代理,但是当我尝试使用 sourceTree 从
我尝试将现有项目从 github 存储库导入 aptana studio,但出现错误,提示权限被拒绝(公钥)。 fatal:远端意外挂断 我确保将 ssh 添加到我在 github 中的帐户。我还运行
我正在尝试以这种方式从字符串创建公钥: byte[] keyBytes = Base64.decode(publicKeyStr.getBytes("utf-8"), Base64.DEFAULT);
在 LDAP 服务器中,我以字符串格式存储了我的公钥。我必须比较从 LDAP 服务器检索到的值和用户证书的公钥。 我正在从 LDAP 检索字符串格式的“公钥”。通过以下方法,我得到了公钥格式的输出。
我正在使用 C# ECDiffieHellmanCng 类并使用 sample 中的代码发现了一个(在我看来很奇怪的)行为:任何项目中生成的每个公钥都是一样的!这是正确的行为吗? 例子: using
我正在使用 crypto lib ,遇到了一个问题:我需要将 PublicKey 类型转换为 byte[],因为它可以用私钥完成: privkey.D.Bytes() 我该如何解决这个问题? 最佳答案
我正在尝试创建一个将加密用户消息的应用程序。用户公钥需要作为字符串发布到服务器。我正在像这样生成 Android KyeStore PublicKey: public static Publi
我调用返回 2 个公钥(作为字符串)的 API,每个公钥由 512 位组成: 588506d0c604d8270ac4de9fdc520abe4779128ff5b7940d38fcd13d5e5fd
如果创建了一个新的 ssh key ,请将公钥复制并粘贴到 gitlab 项目,并在 ~/.ssh 中创建一个 conifg 文件... 我仍然无法克隆该项目(我不是所有者,但我被添加为用户) 这就是
我已经在 github 上为我的机器注册了 ssh key ,并通过键入 ssh git@github.com 验证它是否有效。接收认证成功的响应。 但是,当我尝试将机器上的源代码推送到我的 git
在尝试将 byte[] 数组转换为 PublicKey 时出现错误: Exception in thread "main" java.security.spec.InvalidKeySpecExcep
我想从 OpenSSL 获得与 Java PublicKey.getEncoded() 相同的 ASN.1 输出。我使用 EC,曲线类型是 prime256v1。这是我的 OpenSSL 代码: EC
我不想生成新的公钥,有人向我发送他的公钥(类型 PublicKey.sql),然后我将使用此 key 加密一些文本并将其保存在 Oracle DataBase 中。 我找到了一种读取公钥的方法,但我收
我使用以下代码将公钥和私钥转换为字符串 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); keyPairGen.in
我尝试使用 git 简化我的工作,然后我尝试使用 git pull 我得到“权限被拒绝(公钥),我通过两个命令解决这个问题: 1. ssh-agent /bin/bash 2. ssh-add /ro
我是一名优秀的程序员,十分优秀!