【问题标题】:Generating an RSA KeyPair and extracting modulus and exponent from Public Key in Android在 Android 中生成 RSA 密钥对并从公钥中提取模数和指数
【发布时间】:2016-06-26 10:11:11
【问题描述】:

我在 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();
    }

如何提取刚刚生成的 PublicKey 的模数和指数?

【问题讨论】:

  • 将公钥转换为RSAPublicKey,然后从那里检索和编码参数。
  • 谢谢我这样做了,但是有什么方法可以让我获得上述格式(在 RSAKeyValue 标签之间),而无需通过检索和编码参数手动完成?
  • Android 版本的 java 运行时不包含对 XML 数字签名标准的太多支持,因此您找不到太多帮助。
  • 感谢您的帮助,C Sharp 和 Android 之间的 RSA 并不容易

标签: android rsa public-key


【解决方案1】:

没有原生的 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;
    }

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2023-03-21
    • 1970-01-01
    • 2013-07-15
    • 2014-04-16
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多