如何组合 n 和 e 来创建 RSA 中的公钥?

Laz*_*zlo 6 rsa public-key-encryption

我有一个 128 字节(1024 位)模数(采用字节数组格式)和指数(也是采用字节数组格式)。我需要创建一个代表公钥的 128 字节数组。

根据维基百科,“公钥由模数 n 和公共(或加密)指数 e 组成。” 但这并没有告诉我如何混合两者。

正确的操作是什么?
- n^e(会保持 128 字节长吗?)
- 只是 n?
- n 后面跟着 e?
- n 添加到 e 上?
- 还有什么吗?

Mar*_*wis 6

有许多不同的格式来表示 RSA 公钥。PKCS#1 是最广泛使用的之一。在RFC 3447中,公钥格式的定义如下:

  RSAPublicKey ::= SEQUENCE {
      modulus           INTEGER,  -- n
      publicExponent    INTEGER   -- e
  }
Run Code Online (Sandbox Code Playgroud)

要以该格式表示密钥,您需要对此数据结构应用 ASN.1 DER 编码。

另一个选择是来自 RFC 3280 的SubjectPublicKeyInfo:

  SubjectPublicKeyInfo  ::=  SEQUENCE  {
     algorithm            AlgorithmIdentifier,
     subjectPublicKey     BIT STRING  
  }
Run Code Online (Sandbox Code Playgroud)

对于 RSA,算法应为1.2.840.113549.1.1.1

还有其他几种格式,例如用于 SSL 的格式。


Vot*_*ple 3

您将无法创建这样的数组。“公钥”有两部分:指数和模数。它们是单独的数字,必须分开保存,因为稍后需要两者来执行加密和解密。虽然你的n是 1024 位,但是公钥总共必然更长。