我有一个 128 字节(1024 位)模数(字节数组格式)和我的指数(也是字节数组格式)。我需要创建一个代表公钥的 128 字节数组。
根据维基百科,“公钥由模数 n 和公共(或加密)指数 e 组成。” 但这并没有告诉我如何混合两者。
正确的操作是什么?
- n^e(会保持 128 字节长吗?)
- 只是 n?
-n 后跟 e?
-n 添加到 e?
- 别的东西?
我有一个 128 字节(1024 位)模数(字节数组格式)和我的指数(也是字节数组格式)。我需要创建一个代表公钥的 128 字节数组。
根据维基百科,“公钥由模数 n 和公共(或加密)指数 e 组成。” 但这并没有告诉我如何混合两者。
正确的操作是什么?
- n^e(会保持 128 字节长吗?)
- 只是 n?
-n 后跟 e?
-n 添加到 e?
- 别的东西?
有许多不同的格式来表示 RSA 公钥。更广泛的一种是 PKCS#1。在RFC 3447中,公钥格式的定义为
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
要以该格式表示密钥,您需要将 ASN.1 DER 编码应用于此数据结构。
另一种选择是来自 RFC 3280 的 SubjectPublicKeyInfo:
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
对于 RSA,算法应该是1.2.840.113549.1.1.1。
还有几种其他格式,例如用于 SSL 的格式。
您将无法创建这样的数组。“公钥”有两部分:指数和模数。它们是单独的数字,必须分开保存,因为稍后需要两者来执行加密和解密。尽管您n
是 1024 位,但公共密钥一共必然更长。
“N 后跟 e”可能最接近您想要的。但是,如果您打算与其他一些基于 RSA 的系统进行互操作,您应该查阅该系统的文档以了解他们希望如何格式化公钥。