【问题标题】:is it possible to generate RSA privatekey using modulus and exponent like did on Java side?是否可以像 Java 端那样使用模数和指数生成 RSA 私钥?
【发布时间】:2019-01-28 17:21:35
【问题描述】:

我在 iOS 解决方案上使用 RSA 解密。我想使用 Java 端使用的相同参数来创建 privateKey,但我无法找到方法。 有没有办法做到这一点,或者是否可以使用 Java 导出这个 privateKey,然后在 iOS 解决方案上导入它?

byte[] modulusBytes = Base64.decode("base64EncodedString");
byte[] DBytes = Base64.decode("anotherBase64EncodedString");
BigInteger modulus = new BigInteger(1, modulusBytes );
BigInteger exponent = new BigInteger(1, DBytes);

RSAPrivateKeySpec rsaPrivKey = new RSAPrivateKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PrivateKey privKey = fact.generatePrivate(rsaPrivKey);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

我的 iOS 应用程序将使用此算法解密 QRCode。 QRCode 使用 Java 通过如下所示的公钥加密。为了解密这段代码,我们在 Java 端使用上面的代码。那么我们如何生成能够解密的相同私钥呢?没有相同的模数和指数可以做到吗?

byte[] modulusBytes = Base64.decode("base64EncodedString");

byte[] exponentBytes = Base64.decode("AQAB");
BigInteger modulus = new BigInteger(1, modulusBytes );
BigInteger exponent = new BigInteger(1, exponentBytes);

RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(rsaPubKey);

【问题讨论】:

  • 那你真的没有私钥吧?实际上,您的私钥实际上是用于派生您的实际私钥的参数
  • 不,我没有私钥,我想使用模数和指数创建它
  • 有两种情况。如果转换模数和指数的函数是确定性的(即每次都为相同的参数产生相同的答案),那么实际上,您的模数和指数将成为您的私钥(因为使用它们是微不足道的)他们像你一样,创建实际的 RSA 私钥)。它们就在您的源代码中,供所有人使用。那是不安全的。
  • 这就像在您的前门锁旁边留下一张房子钥匙、一些钥匙坯和一些工具的照片。你的钥匙不是唯一的钥匙,[照片、空白、工具]的组合现在是一把新钥匙,任何人都可以用它来打开你的锁
  • 那么正如我所说,这意味着这种加密方案完全不安全,几乎没有用处。你的模块和指数实际上变成了私钥,它们就在那里,任何人都可以从你的应用程序代码中读取。

标签: java ios swift rsa private-key


【解决方案1】:

这不是它应该的工作方式。您可以在每一侧生成一对私钥和公钥,并交换 public 密钥。每一方将用对方的公钥加密他们希望发送的消息(只要它们不太长),并用他们自己的私钥解密收到的消息。但私钥是并且应该保持不变,private

【讨论】:

  • 上述代码创建的公钥和私钥,已经在Server和Android版本上使用过,所以我需要创建一个类似的,不然怎么弄?
  • 虽然您可能使用相同的代码,但密钥不会相同,从您的角度来看,它们实际上是随机的。每次运行代码时,您都会得到一组新的键。
  • 是否可以将生成的私钥使用文件格式,如PEM或DER导出,然后在iOS端使用?
  • 你可以,但你不应该。
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多