go语言实现非对称加密——RSA加密解密的实现

本文介绍了非对称加密的基本概念,强调了RSA加密解密的重要性,并详细阐述了在Go语言中如何实现RSA加密解密的过程,包括生成私钥、公钥,以及加密和解密的步骤。此外,还提到了非对称加密在区块链、数字签名等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为作者原创,如需转载,请注明出处
https://blog.youkuaiyun.com/weixin_42940826


非对称加密简介

什么是非对称加密
非对称加密,顾名思义,是相对于对称加密的一种加密方法,对称加密是指加密与解密使用的是同一把秘钥,而非对称加密有两把不同的秘钥,一个称之为公钥,另一个称之为私钥,使用公钥加密,私钥可以解密。或者使用私钥加密,公钥可以解密。大多数情况下,公钥可以公开,但是私钥只能自行持有,不可泄露。
常用的非对称密码算法有RSA、ECC椭圆形加密这两种。
本文亦将用go语言具体实现RSA的加密解密,关于椭圆形曲线加密,将在我的另一篇博文中作详细介绍。

为什么需要非对称加密
非对称加密可以说是密码学史上最伟大的发明之一,因为它解决了对称加密的秘钥配送问题,举个例子,A和B进行通信,A使用秘钥为123456,那么B如何知道秘钥为123456进行解密呢,如果直接发送,很容易被黑客抓取到,除了私底下交换秘钥,似乎没有更好的方法了。
但是非对称加密的出现解决了这一弊端,举个例子,还是A和B进行通信,A要给B发送信息,B把自己的公钥发送给A,然后A使用B的公钥对信息进行加密 发送给B,由于此信息使用的B的公钥进行加密,所以只有使用B的私钥才能解密,因此即使黑客知道B的公钥,也是没有任何办法的。

应用场景
信息加密,登陆认证,数字签名,数字证书等等,如今红极一时的区块链技术也是使用了非对称加密,还有包括网银U盾、二代居民身份证本质上也是使用了非对称加密。
关于数字签名将在我的另一篇博文中作详细介绍。


RSA加密解密流程一览

生成私钥流程

  1. 使用rsa中的GenerateKey方法生成私钥

    func GenerateKey(random io.Reader, bits int) (priv *PrivateKey, err error)

    • rand.Reader ->随机数生成器
    • bits ->建议1024的整数倍
  2. 通过x509标准将得到的ras私钥序列化为ASN.1 的 DER编码字符串

    func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte

  3. 将私钥字符串设置到pem格式块中

    初始化一个pem.Block块

    type Block struct {
          
          
       Type    string            // 得自前言的类型(如"RSA PRIVATE KEY")
       Headers map[string]string // 可选的头项
       Bytes   []byte            // 内容解码后的数据,一般是DER编码的ASN.1结构
    }
    
  4. 通过pem将设置好的数据进行编码, 并写入磁盘文件中

    func Encode(out io.Writer, b *Block) error

    • out - 准备一个文件指针
    • block- 将准备好的pem.block放入其中

生成公钥流程

  1. 从得到的私钥对象中将公钥信息取出

    type PrivateKey struct {
          
          
        PublicKey            // 公钥
        D         *big.Int   // 私有的指数
        Primes    []*big.Int // N的素因子,至少有两个
        // 包含预先计算好的值,可在某些情况下加速私钥的操作
        Precomputed PrecomputedValues
    }
    
  2. 通过x509标准将得到 的rsa公钥序列化为字符串

    func MarshalPKIXPublicKey(pub interface{
          
          }) ([]byte, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值