RSA public key size python
需要帮助使用RSA加密和decryption Python。我对所产生的密钥和私人钥RSA 2048 by using the public key,然后发送到目的地为十六进制。不管一个人多,面临问题,the public key size is generated 2048位比大。使用下面的脚本。我知道为什么size is the key 2048位比大吗?P></
1 2 3 4 5 6 7 8 9 | import Crypto from Crypto.PublicKey import RSA key = RSA.generate(2048) binPrivKey = key.exportKey('DER') binPubKey = key.publickey().exportKey('DER') print(binPubKey.encode('hex')) |
公钥由两部分组成:模数和公共指数。模数的大小决定了键的大小。因此,如果密钥对生成器的大小是2048位。公共指数可以是任何值,也可以是2048位。然而,它通常很小。现在,它通常设置为65537,即十六进制中的
公钥结构应包含这两个组件。对于任何非对称原语(如rsa),编码的密钥大小通常大于密钥大小。此外,它还可能包含开销(用于标识模数和指数的位置)和有关密钥本身的信息(例如,一个表明它确实是RSA公钥的OID)。
要了解更多信息,您可以查看PKCS 1和X.509证书规范。后者指定了一个名为
1 2 3 4 5 6 7 8 | SEQUENCE (2 elem) SEQUENCE (2 elem) OBJECT IDENTIFIER1.2.840.113549.1.1.1 rsaEncryption (PKCS #1) NULL BIT STRING (1 elem) SEQUENCE (2 elem) INTEGER (2048 bit) 229584378117493781267359049573867661726440328315282498307064019352014… INTEGER 65537 |
这里的第一个数字是模,第二个是公指数。
所以简而言之,密钥大小、编码密钥大小和密钥强度之间存在差异。
笔记:
- 2048位的RSA密钥对只提供大约112位的安全性,而AES-128提供大约127位的安全性。通常,您应该尝试使用3072位密钥。
- 私钥通常包含中国剩余定理的参数和2048位模和2048位私有指数之上的公共指数,因此它会更大。
如果要将密钥导出到其他地方使用,您可能会发现以PEM格式导出密钥更容易,如下所示:
1 2 3 4 5 6 7 8 9 10 | >>> print (key.publickey().exportKey('PEM')) -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtd2o9NY7P9CvXzECu4Ky tieqYGAkOFrvuRnZpf3VP4VK0XMFSXM8/i5c0Q3Ml44If/zqVo/cXAO85YqV8ZtJ YRtK9wcEr5epTX6iahxqgObgjFAbIRd6+we6znxBy+OG0JfEGn/GSBoq9g8mcr2e HhKflp3B57X3+Qn1EbIYDFThWxy4HUZXh64LJiA5s0yeYzlGyjcC6R/Q59/CsyKP K5LdcRp+CUrHfqwimiFUEZ+KNOob1klAyY4UKX9CI1AnWwZuSrmtbH+11Cfwgnnk 5RpqDvFNB30qsuD0elE+9zLOrq0jGicEoPtYAC3Z7phoODoR5vHbJ0R38qGItLMl /wIDAQAB -----END PUBLIC KEY----- |
DER格式包含相同的数据,但采用二进制格式,可能不太便于移植。
密钥长度不是2048位,因为公钥不仅包含模数n,还包含加密指数e。
如果只需要2048位模N,则可以按如下方式提取:
1 2 3 4 5 6 7 8 9 | >>> print key.n 22958437811749378126735904957386766172644032831528249830706401935201456098524775 93935742531467773637499977046456570312080938678104306767641814358663672099815985 37166257748568890906635464134344070390567919827141645499361303936386291407244786 88192939984906393278409502460458733268776367836168349094440408475953441252058796 28391483565417017898863634275114447933217938009351306832376849011143622553495660 63424041991601059614183085270921567421339154500925080655811214971889251644612159 17495238196068931081086234165571014450595993262432428425126883651547622718096951 337250550253777137307186332200705951701212904813212411391 |
是的,这是一个2048位的值:
1 2 | >>> print key.n.bit_length() 2048 |