Golang中RSA的使用
一. 什么是RSA
对于经常要和网络通信打交道的程序猿来说,RSA这三个字母一定不会陌生。RSA是一种非对称的加密算法,在公开密钥加密和电子商业中被广泛使用。
RSA的核心就是非对称加密算法。非对称加密需要生成一对密钥对。一个用于公开的公开密钥(publickey),而另一个则是需要私下保存不能泄露的私有密钥(privatekey)。使用其中一个密钥进行加密后的信息,只有通过另一个密钥解密才能还原。
利用这一特性,通常有一下两种运用方式:
①公钥加密,私钥解密——用于加密信息,防止信息泄露
②私钥加密,公钥解密——用于数字签名,进行身份验证
二. 生成密钥对
通过GenerateKey方法我们能生成一个PrivateKey
rsa.GenerateKey(random io.Reader, bits int) (*rsa.PrivateKey, error)
来看看PrivateKey的结构
// A PrivateKey represents an RSA key
type PrivateKey struct {
PublicKey // public part.
D *big.Int // private exponent
Primes []*big.Int // prime factors of N, has >= 2 elements.
// Precomputed contains precomputed values that speed up private
// operations, if available.
Precomputed PrecomputedValues
}
我们可以看到PrivateKey里组合了PublicKey的信息
// A PublicKey represents the public part of an RSA key.
type PublicKey struct {
N *big.Int // modulus
E int // public exponent