go语言RSA加密算法(一):生成密钥对

2023-11-13

 生成密钥对,分别存储到公钥文件(./files/public.pem),私钥文件中(./files/private.pem)

package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"flag"
	"log"
	"os"
)

func main() {
	if err := GenerateRSAKey(); err != nil {
		log.Fatal("密钥生成失败!")
	}
	log.Println("密钥生成成功!")
}

// 生成密钥对并保存到文件
func GenerateRSAKey() error {
	// 1、RSA生成私钥文件的核心步骤:
	// 1) 生成RSA密钥对
	var bits int
	flag.IntVar(&bits, "key flag", 1024, "密钥长度,默认值为1024位")
	privateKer, err := rsa.GenerateKey(rand.Reader, bits)
	if err != nil {
		return err
	}
	// 2) 将私钥对象转换成DER编码形式
	derPrivateKer := x509.MarshalPKCS1PrivateKey(privateKer)
	// 3) 创建私钥pem文件
	file, err := os.Create("./files/private.pem")
	if err != nil {
		return err
	}
	// 4) 对密钥信息进行编码,写入到私钥文件中
	block := &pem.Block{
		Type:  "RSA PRIVATE KEY",
		Bytes: derPrivateKer,
	}
	err = pem.Encode(file, block)
	if err != nil {
		return err
	}

	// 2、RSA生成公钥文件的核心步骤:
	// 1) 生成公钥对象
	publicKey := &privateKer.PublicKey
	// 2) 将公钥对象序列化为DER编码格式
	derPublicKey, err := x509.MarshalPKIXPublicKey(publicKey)
	if err != nil {
		return err
	}
	// 3) 创建公钥pem文件
	file, err = os.Create("./files/public.pem")
	if err != nil {
		return err
	}
	// 4) 对公钥信息进行编码,写入到公钥文件中
	block = &pem.Block{
		Type:  "PUBLIC KEY",
		Bytes: derPublicKey,
	}
	err = pem.Encode(file, block)
	if err != nil {
		return err
	}

	return nil
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言RSA加密算法(一):生成密钥对 的相关文章

  • 什么是即时通讯?即时通讯的发展

    一 即时通讯是什么 即时通讯是通过技术来体现在线聊天 交流的软件 有两种架构 一种是C S架构 采用客户端 服务器形式 用户使用过程中需要下载安装客户端软件 比如 微信 QQ 陌陌 钉钉 企业微信 飞书等等通讯软件 采用B S架构 浏览器

随机推荐

  • 小智AI ChatGPT的优点和局限性:

    自然度高 ChatGPT能够生成非常自然的语言 让用户感觉像是在和一个真实的人进行交流 多功能性 ChatGPT可以用于很多不同的场景 比如智能客服 聊天机器人 文本生成 语音合成等等 知识储备 ChatGPT在其训练过程中已经接触到了大量
  • 1024程序员节,庆祝上海csdn嘉年华的圆满结束,也庆祝CDC的诞生,也很开心看到理智偶像三太子傲丙

    前言 1024程序员节 庆祝10月23号 上海csdn嘉年华的圆满结束 也庆祝CDC的诞生 也很开心看到理智偶像三太子傲丙 哦耶 1 现场签到 2 很幸运能拿到csdn的嘉宾证 并参与这次嘉年华活动 3 收到了官方给我们的小礼物 很开心 也
  • 无显卡也能AI作画

    经典碎碎念 事情起因是这样的 我之前写了如何在linux上用Stable Diffusion WebUI 里边提到我迟迟没有弄webui是因为我笔记本A卡 台式机显卡带不动 所以无奈只能使用学校服务器搭一个 当时有人说我 你自己电脑不行怎么
  • 基于GEE平台的植被覆盖度(FVC)像元二分法计算

    一 植被覆盖度计算方法 植被覆盖度FVC Fractional Vegetation Cover 定义为单位面积内绿色植被冠层垂直投影面积所占比例 FVC是衡量地表植被状况的重要指标之一 也是区域生态系统环境变化的重要指示 对水文 生态 区
  • Angular练习之animations动画二

    返回目录 回顾 文章基于angular的练手项目 文章目录前一篇文章 Angular练习之animations动画 介绍了在angular中使用动画的基本方法 引入动画模块 gt 创建动画对象 gt 在动画载体上使用 我觉得其核心的内容在创
  • python datetime.timedelta()函数介绍

    一 timedelta 函数说明 timedelta 表示两个 date 对象或者 time 对象 或者 datetime 对象之间的时间间隔 精确到微秒 class datetime timedelta days 0 seconds 0
  • 最全的Java笔试题库之选择题篇-总共234道【1~60】

    1 下面中哪两个可以在A的子类中使用 class A protected int method1 int a int b return 0 A public int method 1 int a int b return 0 B priva
  • Docker搭建ElasticSearch

    Docker这个容器技术已经非常成熟了 市面上用的公司也特别多 我呢也经常用 也被这Docker经常坑 像什么mysql镜像版本更新后远程无法连接咯 什么虚拟机或者虚拟ip使用Docker搭建Nginx外部无法访问咯 再像这个ES启动报错
  • import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _cr

    import resolveComponent as resolveComponent createVNode as createVNode createTextVNode as createTextVNode withCtx as wit
  • 高频golang面试题:简单聊聊内存逃逸?

    文章目录 问题 怎么答 举例 问题 知道golang的内存逃逸吗 什么情况下会发生内存逃逸 怎么答 golang程序变量会携带有一组校验数据 用来证明它的整个生命周期是否在运行时完全可知 如果变量通过了这些校验 它就可以在栈上分配 否则就说
  • 乐划锁屏推出“屏上看展”,用创意“解锁”艺术新体验

    在移动互联网时代 手机不仅是重要的通讯工具 作为点亮屏幕后的 第一眼 手机锁屏也为人们提供了更加集成 更加多元的信息接收渠道 为了满足人们的碎片化消遣需求 加速信息传播 OPPO依托锁屏点亮即触达的特点 将锁屏壁纸作为探索碎片化娱乐的新通道
  • Exception encountered during context initialization - cancelling refresh attempt: org.springframewor

    Exception encountered during context initialization cancelling refresh attempt org springframework beans factory BeanCre
  • Android通过DownloadManager实现App的版本更新功能

    1 DownloadManager介绍 DownloadManger是android 2 3 api level 9 开始 提供的用于优化处理长时间的下载操作 DownloadManager 处理Http Https连接并监控连接中的状态变
  • 如何使用Python爬虫抓取数据?

    Python爬虫应用十分广泛 无论是各类搜索引擎 还是日常数据采集 都需要爬虫的参与 其实爬虫的基本原理很简单 今天小编就教大家如何使用Python爬虫抓取数据 感兴趣的小伙伴赶紧看下去吧 工具安装 首先需要安装Python的request
  • sqli-labs第十八关~第二十二关

    这几关均为请求头注入 请求头记录的信息可以拼接到SQL语句上 User Agent 浏览器身份标识字符串 Referer 表示浏览器访问的前一个页面 可以认为是之前访问页面的连接件浏览器带到了当前页面 Accept 可接受的响应内容类型 C
  • 攻防世界-re-for-50-plz-50

    1 下载附件 exeinfo查壳 无壳 2 32位IDA分析 主函数分析 在注释里 31的来源 python和C语言 a cbtcqLUBChERV Nh X D X YPV CJ print len a include
  • Shell条件判断的三种方式

    一 三种方式 1 test 条件表达式 2 条件表达式 3 条件表达式 支持正则 注意 和 括号左右两边需要留空格 二 常用判断条件 e 判断文件是否存在 任何类型文件 e app echo f 判断文件是否存在并且是一个普通文件 f st
  • selenium学习网址

    1 http www testclass net selenium java testclass网址 2 http www yiibai com selenium selenium ide html yiibai网址 转载于 https w
  • Linux mmap系统调用视角看缺页中断

    问题 1 mmap具体是怎么实现比read write少一次内存copy的 2 mmap共享映射和私有映射在内核实现的时候到底有什么区别 3 mmap的文件映射和匿名映射在内核实现的时候到底有什么区别 4 父子进程的COW具体怎么实现的 概
  • go语言RSA加密算法(一):生成密钥对

    生成密钥对 分别存储到公钥文件 files public pem 私钥文件中 files private pem package main import crypto rand crypto rsa crypto x509 encoding