skip to content
Liu Yang's Blog
Table of Contents

基本用法

验证安装

Terminal window
openssl version

rand: 随机数生成

常用于生成密码等工具

Terminal window
# 将随机数据编码为 Base64 格式
openssl rand -base64 12
# 生成随机数,编码为十六进制格式
openssl rand -hex 8

生成SSH所需的公钥和私钥

使用简单的genrsa

Terminal window
openssl genrsa -out private.key 2048

此时,生成的 private.key 文件是一个 PEM 格式的文件,里面包含了完整的 RSA 私钥信息。RSA 密钥对的特点是:私钥中隐含了公钥的数学信息(公钥由模数 n 和公钥指数 e 组成,而这些都可以从私钥推导出来)。

提取公钥的办法

Terminal window
openssl rsa -in private.key -pubout -out public.key

使用更全能的genpkey

同理,除了RSA,其他加密算法也是可用的。

Terminal window
openssl genpkey -algorithm ed25519 -out private_key.pem
openssl pkey -in private_key.pem -pubout -out public_key.pem

生成网站自签名证书

使用私钥生成一个有效期为 365 天的自签名证书。

Terminal window
openssl req -x509 -new -key private.key -out cert.pem -days 365

文件加密和解密

使用 AES-256-CBC 算法加密和解密文件。

使用-pbkdf2 -iter参数可生成更安全的密钥。

Terminal window
openssl enc -aes-256-cbc -in file.txt -out file.enc
openssl enc -aes-256-cbc -d -in file.enc -out file.dec.txt -k "yourpassword"

对文件签名和验证

私钥签名:

Terminal window
openssl dgst -sign private_key.pem -out signature.bin data.txt

公钥签名:

Terminal window
openssl dgst -verify public_key.pem -signature signature.bin data.txt

引申和拓展

使用自带的ssh-keygen生成密钥

windows和linux 通常使用ssh-keygen,例如:

Terminal window
# 生成rsa密钥
ssh-keygen -t rsa -b 4096
# 生成Ed25519,长度固定256, -f可指定文件名
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
# 查看密钥类型
ssh-keygen -l -f ~/.ssh/id_rsa.pub

需要注意的是ssh-keygen 默认生成的密钥对并不是 PEM 格式,而是 OpenSSH 自己的格式(常称为 OpenSSH 格式)

Terminal window
#转换为pem格式
ssh-keygen -p -m PEM -f ~/.ssh/id_ed25519
ssh-keygen -e -m PEM -f ~/.ssh/id_ed25519.pub > id_ed25519.pem

PEM 格式的密钥与 OpenSSL 是完全兼容的。PEM(Privacy-Enhanced Mail)是一种通用的编码格式,广泛用于存储密钥、证书等加密数据,OpenSSL 原生支持这种格式。无论是私钥、公钥还是证书,只要是以 PEM 格式保存的,OpenSSL 都可以直接读取和处理。

生成UUID

linux

  • 命令获取:uuidgen
  • 内核获取: cat /proc/sys/kernel/random/uuid

windows

Powershell工具 [guid]::NewGuid().ToString()

使用GPG

GPG(GNU Privacy Guard)是一个开源的加密工具,用于保护数据的隐私和完整性。它是 PGP(Pretty Good Privacy)的免费实现,广泛应用于文件加密、数字签名和电子邮件安全。GPG 使用公钥加密体系,结合对称和非对称加密技术,提供强大的安全功能。

GPG常用于Github提交验证、加密、签名等,之后会再补充细节。

Ref

暂无