要点

  1. RSA是一种块加密,一个具体的RSA算法对应一个N(模数)

    块加密:

    • 密钥长度为工作长度

    • 明文不足,则需填充(一般都有几种填充方式)

    • 密文长度同密钥长度一致

  2. N(模数)的二进制位数,称之为RSA长度(对应openssl函数,RSA_size(rsa)),常用1024(128B),2048(256B)

  3. openssl genrsa 采用PKCS#8,使用PEM格式存储

  4. 公钥(N, E)

  5. 私钥(N, D)

  6. RSA(1024)的D:3, 65537(0x10001),当N值大于65537时,默认用65537!

RSA ASN.1定义

加密和签名

  1. 加密:公钥用来加密,私钥解密,保证信息被唯一持有私钥的接收((仅你可读但别人不可读,任何人都可写))

  2. 签名:私钥用来加密,公钥解密,保证信息是由唯一持有私钥的发送(仅你可写但别人不可写,任何人都可读)

填充模式

  1. RSA_PKCS1_PADDING (最常用的模式)

  2. RSA_PKCS1_OAEP_PADDING

  3. RSA_NO_PADDING

参考

  1. RSA算法原理–阮一峰
  2. https://en.wikipedia.org/wiki/65537_(number)
  3. https://www.openssl.org/docs/manmaster/crypto/RSA_public_encrypt.html

留言