我在Android中生成了一个公共私钥对。现在我需要将我的公钥发回服务器,以便用RSA加密进行通信。但是,我正在与一个。NET服务器(用C)进行通信。因此,我需要以以下格式发送我的公钥:
<RSAKeyValue><Modulus>Modulus In Base 64</Modulus><Exponent>Exponent in Base 64</Exponent></RSAKeyValue>
我用以下代码生成密钥对:
public static void generateKey() {
try
{
final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
privateKey = key.getPrivate();
publicKey = key.getPublic();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
我如何提取我刚刚生成的公钥的模和指数?
没有原生的Android方法来解决我的问题。为了提取生成的公钥的模和指数,我使用了以下代码,它将一个Android公钥作为输入,并以.NET XML格式返回它:
public static String getPublicKeyAsXml(PublicKey publicKey) throws Exception
{
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPublicKeySpec ks = kf.getKeySpec(publicKey, RSAPublicKeySpec.class);
BigInteger modulus = ks.getModulus();
BigInteger exponent = ks.getPublicExponent();
byte[] modByte = modulus.toByteArray();
byte[] expByte = exponent.toByteArray();
modByte = testBytes(modByte);
expByte = testBytes(expByte);
String encodedModulus = Base64.encodeToString(modByte, Base64.NO_WRAP);
String encodedExponent = Base64.encodeToString(expByte, Base64.NO_WRAP);
String publicKeyAsXML = "<RSAKeyValue>" +
"<Modulus>" + encodedModulus + "</Modulus>" +
"<Exponent>" + encodedExponent + "</Exponent>" +
"</RSAKeyValue>";
return publicKeyAsXML;
}
我搜索了许多网站,试图了解RSA是如何工作的。 我有一个模数“856C2F888474B83612A82E4E00D0CD4069A6783140433D50725F”和指数“03”,我必须解密以十六进制字节组成的信息。我的问题是: 如何创建公钥?一旦我有了公钥,我必须在base64中编码还是公钥准备解密?
如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥: $ cd ~/.ssh $ ls a
我正在Erlang中创建一个应用程序,给定一个RSA私钥,它可以返回RSA公钥和与该priv密钥相关联的x509公钥。 ----只是一个更新---- 在花了一些时间了解x509并阅读了Erlang public_key文档后,我找到了一个解决方案: 如果我可以通过简单地获取模数和publicExponent,从“RSaprivateKey”生成“RSapublicKey”,那么生成这两个键的代码如
问题内容: 我正在尝试了解采取OpenSSH公钥的步骤,如下所示: SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAqmEmDTNBC6O8HGCdu0MZ9zLCivDsYSttrrmlq87 / YsEBpvwUTiF3UEQuFLaq5Gm + dtgxJewg / UwsZrDFxzpQhCHB6VmqrbKN2hEIkk / HJvCnAmR1ehXv8n2BWw
问题内容: 我正在尝试学习一些加密编码,并生成了当前保存在字节数组中的32字节私有密钥( byte [] privatekey )。我知道公钥是使用 secp256k1 命名为椭圆曲线参数和一个公式生成的,其中,其中G是椭圆曲线上的某个点(ECPoint?),但是我无法将该命名参数的规范和公式转换为的实际编码公钥。我知道自Java 7起,and包中包含一些类,以简短的代码即可完成此操作,但是我找不
我以这种格式将私钥保存在DB中。 我需要从中提取公钥。openssl\u pkey\u get\u详细信息需要资源,但如何从字符串创建资源? 我试过这个 错误是openssl\u pkey\u get\u details()期望参数1是资源,给定布尔值 编辑1: 我试图从@kbarborak bellow获得解决方案,但$pk\u get是错误的: var_转储的输出为: