繁体   English   中英

在我自己实现的 RSA Lib 中,如何将 RSA 密钥的 2 部分转换为 b64?

[英]In an RSA Lib I implemented myself, how do I convert the 2 parts of an RSA key to b64?

我正在将 C 用于我正在实施的小型加密库。 我有 n (= p*q) 和 e (> 1, n 的互质数)。 如何将这两个数字转换为一键?

将密钥转换为结构的规范在PKCS#1 规范中。 这基本上就是这个 ASN.1 结构:

RSAPublicKey ::= SEQUENCE {
    modulus           INTEGER,  -- n
    publicExponent    INTEGER   -- e
}

然后使用 DER(ASN.1 的区分编码规则)对其进行编码。 这是一种二进制编码,当然可以转换为base 64。但通常它不仅仅是转换为base 64,它还会分成多行并由header行和页脚行包裹,给你PEM。 在这种情况下, header 应指示RSA PUBLIC KEY

如果您想要更高的兼容性,那么二进制 PKCS#1 结构之前依次是 X.509 证书中使用的描述性包装器(在 web 浏览器中使用的那些)。 该结构称为SubjectPublicKeyInfo并且 PEM 包装器将指示类型PUBLIC KEY - 因此没有 RSA。 二进制结构中的信息已经表明它RSA 公钥。

但我想你会想从相对简单的 PKCS#1 结构开始,然后对其进行扩展。 请尝试旧的 ASN.1、BER 和 DER 子集的外行指南以获取更多信息。


我喜欢标准,但您也可以对模数和公共指数使用两字节长度指示,然后将两者连接起来,如下所示:

<l_mod> <modulus> <l_exp> <pubexp>

然后您仍然需要考虑编码 integer 值的特定方法。 我会使用无符号大端,这样密钥大小(以字节而不是位为单位)就是l_mod值。 然后你可以上面的base64。 它在任何地方都没有标准化,但它更容易理解和编程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM