优秀的编程知识分享平台

网站首页 > 技术文章 正文

Linux 备忘录 - 13. 编解码与加解密

nanyue 2024-10-03 23:41:00 技术文章 15 ℃

一、摘要与编解码

# 计算文件的 md5 哈希值,
# 128 位(16 字节)的哈希值
md5sum filename.txt

# 计算文件的 SHA-1 哈希值,
# 160 位(20字节)的哈希值
sha1sum filename.txt

# 计算文件的 SHA-256 哈希值,
# 256 位(32字节)的哈希值
sha256sum filename.txt

# 计算文件的 SHA-512 哈希值,
# 512 位(64字节)的哈希值
sha512sum filename.txt

# 一种将二进制数据编码为纯文本的编码方案
# base64 [OPTION]... [FILE]
# 对文件内容进行编码并保存到新文件中
base64 example.txt > encoded.txt
# 解码并保存到新文件中
base64 -d encoded.txt > example.txt

二、GPG(Gnu Privacy Guard)

一个非常流行的加密和数字签名工具,它提供了数据加密、解密和签名的功能。GPG 基于 OpenPGP 标准,允许用户安全地加密和签名数据,以及验证签名和解密其他用户加密的数据。

# 生成密钥,公钥与私钥
gpg --gen-key
# 查看密钥列表
gpg -k

# 导出指定邮箱的公钥到文件
gpg -o public.key -a \
--export liwy@126.com
# 导出备份私钥
gpg -o private.key -a \
--export-secret-keys liwy@126.com
# 导入密钥
gpg --import public.key

# 删除指定的私钥
gpg --delete-secret-key <UID>
# 删除指定的公钥
gpg --delete-key <UID>

# 使用指定公钥加密
gpg -o doc.gpg -e \
-r liwy@126.com doc.txt
# 使用自己的私钥解密
gpg -o doc2.txt -d -a doc.gpg
# 使用私钥生成文件签名
gpg -o doc.sig -b doc.txt
# 使用公钥验证签名
gpg --verify doc.sig doc.txt

三、OpenSSL

OpenSSL 是一个强大的开源工具包,用于实现安全套接字层(SSL)和传输层安全(TLS)协议,以及用于加密、解密、签名、验证、密码学和各种其他安全相关的操作。在 Linux 系统中,OpenSSL 通常用于创建和管理加密密钥、生成证书、加密和解密文件等。

根据不同算法生成摘要:

# 使用 md5 算法生成摘要
openssl dgst -md5 doc.txt
# 使用 sha1 算法生成摘要
openssl dgst -sha1 doc.txt
# 使用 sha256 算法生成摘要
openssl dgst -sha256 doc.txt

base64 编解码与对称加解密:

# 使用 base64 编码
openssl base64 -in doc.txt \
-out doc.base64
# 使用 base64 解码
openssl base64 -d -in doc.base64 \
-out doc2.txt

# 使用 des 加密
openssl enc -des -in doc.txt \
-out doc.des
# 使用 des 解密
openssl enc -d -des -in doc.des \
-out doc4.txt

# 使用 aes256cbc 加密
openssl enc -aes-256-cbc \
-in doc.txt -out doc.aes
# 使用 aes256cbc 解密
openssl enc -d -aes-256-cbc \
-in doc.aes -out doc3.txt

DSA 非对称签名:

# 生成密钥参数
openssl dsaparam \
-out dsaparam.pem 2048
# 使用密钥参数生成私钥
openssl gendsa \
-out private_key.pem dsaparam.pem
# 使用私钥生成公钥
openssl dsa -in private_key.pem \
-pubout -out public_key.pem

# 使用 DSA 私钥对 data.txt 文件的内容
# 进行 SHA-1 哈希签名
openssl dgst -sha1 \
-sign private_key.pem \
-out signature.bin data.txt

# 验证 signature.bin 签名是否与
# data.txt 的 SHA-1 哈希值匹配,
# 并且是否由 public_key.pem 的公钥创建
openssl dgst -sha1 \
-verify public_key.pem \
-signature signature.bin data.txt

RSA 非对称加密解密:

# 创建 rsa 私钥
openssl genrsa \
-out private_key.pem 2048
# 根据私钥创建公钥
openssl rsa -in private_key.pem \
-pubout -out public_key.pem

# 使用公钥加密
openssl rsautl -encrypt \
-pubin -inkey public_key.pem \
-in doc.txt -out doc.rsa
# 使用私钥解密
openssl rsautl -decrypt \
-inkey private_key.pem \
-in doc.rsa -out doc1.txt

# 使用私钥签名
openssl rsautl -sign \
-inkey private_key.pem \
-in doc.txt -out sign1.bin
# 使用公钥验证签名,可逆向出原文
openssl rsautl -verify \
-pubin -inkey public_key.pem \
-in sign3.bin -out new.txt

# 使用私钥签名
openssl dgst -sha256 \
-sign private_key.pem \
-out doc.bin doc.txt
# 使用公钥验签
openssl dgst -sha256 \
-verify public_key.pem \
-signature doc.bin doc.txt

证书相关操作:

# 生成一个 2048 位的 RSA 私钥,
# 并保存到指定文件中
openssl genrsa \
-out private_key.pem 2048

# 创建一个证书签名请求(CSR),
# CSR 是一个包含公钥和其他身份信息的文件,
# 将它发送给证书颁发机构(CA)以获取签名证书。
openssl req -new \
-key private_key.pem -out csr.pem

# 创建一个自签名证书,用于测试或内部使用,
# 自签名证书未由受信任的 CA 签名
openssl x509 -req -days 365 \
-in csr.pem -signkey private_key.pem \
-out certificate.pem

# 查看私钥信息
openssl rsa -in private_key.pem \
-noout -text
# 查看 csr 信息
openssl req -in csr.pem \
-noout -text
# 查看证书信息
openssl x509 -in certificate.pem \
-noout -text
# 验证证书
openssl verify certificate.pem

# 提取证书中的公钥
openssl x509 -in certificate.pem \
-noout -pubkey

Tags:

最近发表
标签列表