存档

文章标签 ‘RSA’

使用 openssl 进行 RSA 加解密

2019/01/18 6,305

在我之前的一篇博客中 RSA 公钥加密原理 中, 对 RSA 非对称加密原理做了简单的阐述。这篇博客主要聊如何使用 OPENSSL 进行密钥对的生成,以及非对称加解密。

一. 生成密钥对

在 OPENSSL 中, RSA 是一个很重要的结构体。它的定义在 rsa_locl.h 中,面包含了在原理中提到的所有重要的变量 随机质数 p, q, 公钥指数 e, 私钥指数 d, 以及模数 n

生成密钥函数:

  • bits 密钥的规模(modulus)。小于 1028 位的密钥是不安全的,小于 512 则会返回 0
  • e 公开的指数。它应该是一个奇数(odd number), 一般是 3, 1765537
  • cb 生成大随机数的回调函数。一般使用 NULL 即可, 默认为 BN_GENCB_call()

继续阅读

RSA 公钥加密原理

2018/12/10 6,064

和对称加密不同,公钥加密(非对称加密)的密钥分为加密密钥(公钥)和解密密钥(私钥)。 公钥是公开的,任何人都有可能知道公钥,并用公钥生成密文,而私钥是保密的,只有解密者才能知道私钥,用它来解密密文获得明文。在这里对使用最广泛的公钥密码算法-- RSA.
RSA 是发明此算法的三位科学家的姓氏的首字母(吐槽一下:外国人的命名真随意)

一. RSA 加密

在RSA中,明文,密钥和密文都是数字, RSA的加密过程可以用如下公式表达:

$$密文 = 明文^E  \mod N$$

即: RSA  的密文是明文的 $E$ 次方求模 $N$ 的结果, 或者说,密文是明文的 $E$ 次方除以 $N$ 的余数。这就是整个加密过程,它非常简洁。因此,如果知道了 $E$ 和 $N$ ,那么任何人都可以进行加密运算,也就是说,

$$ E 和 N 是公钥$$

在实际使用中, E 和 N 是经精心计算的数字。

二. RSA 解密

RSA 解密公式如下:

$$ 明文= 密文^D \mod N$$

即,对密文的 $D$ 次方求模 $N$ 运算,就可以得到明文。这里是

$$D 和 N 是私钥 $$

继续阅读