- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用以下代码将公钥和私钥转换为字符串
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair keyPair = keyPairGen.genKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
String publicK = Base64.encodeBase64String(publicKey.getEncoded());
String privateK = Base64.encodeBase64String(privateKey.getEncoded());
现在我正在尝试将其转换回公钥和私钥
PublicKey publicDecoded = Base64.decodeBase64(publicK);
我收到无法从 byte[] 转换为公钥的错误。所以我这样尝试
PublicKey publicDecoded = new SecretKeySpec(Base64.decodeBase64(publicK),"RSA");
这会导致如下错误
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: Neither a public nor a private key
看来我在此处进行了错误的 key 转换。任何帮助将不胜感激。
最佳答案
我认为您不能将 SecretKeySpec
与 RSA 一起使用。
应该这样做:
byte[] publicBytes = Base64.decodeBase64(publicK);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
并解码私有(private)使用PKCS8EncodedKeySpec
关于java - 如何将 String 转换为 PublicKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294663/
我只有一个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
我是一名优秀的程序员,十分优秀!