moooncrypto

package
v0.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2024 License: Apache-2.0 Imports: 17 Imported by: 0

README

基础知识

  • 公钥加密、私钥解密、私钥签名、公钥验签
  • 身份认证(信息劫持):防冒充、防伪造(非对称加密),确保正确的用户访问正确的网站
  • 数据加密(信息加密):防窃听(对称加密) ,使第三方无法查看明文内容
  • 数据一致性、完整性效验(信息篡改):防篡改、防抵赖(哈希算法),内容被篡改能及时发现
  • 证书的作用:效验签名、传递公钥(客户端加密数据用)
  • 数字签名:私钥加密(服务端),公钥解密(客户端)
  • 非对称加密:密钥配送(交换)

HMAC-SHA256 和 RSA-SHA256 签名的区别

HMAC-SHA256 和 RSA-SHA256 都是常见的签名算法,它们都使用 SHA-256 哈希函数,但它们在签名方式和应用场景上有所不同。

HMAC-SHA256:

HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码。它使用一个密钥(共享密钥)和消息作为输入,生成一个固定长度的哈希值作为签名。在 HMAC-SHA256 中,哈希函数使用 SHA-256。

HMAC-SHA256 的优点是计算速度快,实现简单,且安全性较高。它通常用于验证数据的完整性和身份认证,例如在 API 请求中进行身份验证,或在数据传输过程中验证数据的完整性。

RSA-SHA256:

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法。RSA-SHA256 是一种基于 RSA 签名算法和 SHA-256 哈希函数的数字签名方案。在 RSA-SHA256 中,首先使用 SHA-256 对消息进行哈希,然后使用发送方的私钥对哈希值进行签名,接收方使用发送方的公钥验证签名。

RSA-SHA256 的优点是它提供了非对称加密,具有更强的安全性和更好的防止伪造能力。它通常用于在不安全的通信渠道上验证发送方的身份,例如在 SSL/TLS 证书中验证服务器的身份。

总结:

  • HMAC-SHA256 是一种基于共享密钥的消息认证码,计算速度快,适用于验证数据的完整性和身份认证。
  • RSA-SHA256 是一种基于非对称加密的数字签名方案,适用于验证发送方的身份,提供更强的安全性。

在实际应用中,您可能需要根据具体需求和场景选择合适的签名算法。

Documentation

Overview

Package moooncrypto Wrote by yijian on 2024/01/25

Package moooncrypto Wrote by yijian on 2024/01/25

Package moooncrypto Wrote by yijian on 2024/01/25

Package moooncrypto Wrote by yijian on 2024/01/25

Package moooncrypto Wrote by yijian on 2024/05/09

Package moooncrypto Wrote by yijian on 2024/01/02

Package moooncrypto Wrote by yijian on 2024/01/02

Package moooncrypto Wrote by yijian on 2024/01/02

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AesCBCDecryptText

func AesCBCDecryptText(key, data string) (string, error)

AesCBCDecryptText 解密文本 key 解密密钥,值同加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func AesCBCEncryptText

func AesCBCEncryptText(key, data string) (string, error)

AesCBCEncryptText 加密文本 key 加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func AesCFBDecryptText

func AesCFBDecryptText(key, data string) (string, error)

AesCFBDecryptText 解密文本 key 解密密钥,值同加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func AesCFBEncryptText

func AesCFBEncryptText(key, data string) (string, error)

AesCFBEncryptText 加密文本 key 加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func AesOFBDecryptText

func AesOFBDecryptText(key, data string) (string, error)

AesOFBDecryptText 解密文本 key 解密密钥,值同加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func AesOFBEncryptText

func AesOFBEncryptText(key, data string) (string, error)

AesOFBEncryptText 加密文本 key 加密密钥,长度不能超过 32 个字符,否则返回 error。如果不是 16、24 和 32 整的倍数,则会自动补 0 填充到最近的长度。

func ExtractCertAndKeyFromP12

func ExtractCertAndKeyFromP12(p12Data []byte, password string) (string, string, error)

ExtractCertAndKeyFromP12 P12 文件是一种用于存储和传输用户或服务器私钥、公钥和证书的二进制格式文件,也称为 PFX 文件。 它遵循 Public Key Cryptography Standards #12(PKCS#12)标准,该标准为这些密钥和证书提供了一个可移植的格式。 P12 文件通常包含开发者的公钥和私钥,以及一个证书链,用于验证开发者的身份。

PEM(Privacy-Enhanced Mail)证书是一种使用 Base64 ASCII 编码的纯文本格式,通常具有 .crt 或 .pem 扩展名。 PEM 证书包含证书主体的公开信息、公钥信息以及签署证书的证书颁发机构(CA)的信息。 PEM 证书主要用于存储和传输证书,例如在 HTTPS 服务器上使用的 SSL/TLS 证书。

可从 P12 文件提取出证书和私钥,也可将证书和私钥打包为 P12 文件: 1)openssl genrsa -out private_key.pem 2048 # 生成一个 PKCS#1 格式的 2048 位 RSA 私钥 2)openssl pkcs8 -topk8 -inform PEM -outform PEM -in private_key.pem -out private_key_pkcs8.pem -nocrypt # 将 PKCS#1 格式的私钥转换为 PKCS#8 格式 3)openssl req -new -key private_key.pem -out cert_request.csr # 生成证书签名请求(CSR) 4)openssl x509 -req -days 365 -in cert_request.csr -signkey private_key.pem -out self_signed_cert.pem # 生成自签名证书 5)openssl pkcs12 -export -in self_signed_cert.pem -inkey private_key.pem -out certificate.p12 # 生成 P12 文件

返回值分别为:PEM 证书、PEM 私钥和 error 参数 password 为解密 P12 数据 p12Data 的密码

func HmacSha256Sign

func HmacSha256Sign(data, key string, toUpper bool) (string, error)

HmacSha256Sign SHA256 签名 data 需要签名的数据 key 签名密钥 toUpper 为 true 返回大写的签名字符串,为 false 返回小写的签名字符串

func IsEcPemPrivateKey

func IsEcPemPrivateKey(s string) bool

IsEcPemPrivateKey 判断字符串是否为 ECDSA 格式的 PEM 格式的私钥

func IsOpenSslPemPrivateKey

func IsOpenSslPemPrivateKey(s string) bool

IsOpenSslPemPrivateKey 判断字符串是否为 OpenSSL 格式的 PEM 格式的私钥

func IsP1PemPrivateKey

func IsP1PemPrivateKey(s string) bool

IsP1PemPrivateKey 判断字符串是否为 PKCS#1 格式的 PEM 格式的私钥

func IsP7PemCertificate

func IsP7PemCertificate(s string) bool

IsP7PemCertificate 判断字符串是否为 PKCS#7 格式的 PEM 格式的证书

func IsP8PemPrivateKey

func IsP8PemPrivateKey(s string) bool

IsP8PemPrivateKey 判断字符串是否为 PKCS#8 格式的 PEM 格式的私钥

func IsPemCertificate

func IsPemCertificate(s string) bool

IsPemCertificate 判断字符串是否为 PEM 格式的 X.509 证书

func Md5Sum

func Md5Sum(data string, toUpper bool) string

Md5Sum MD5 计算 data 需要计算的数据

func RsaSha256SignWithPrivateKey

func RsaSha256SignWithPrivateKey(privateKey *rsa.PrivateKey, data []byte) (string, error)

func RsaSha256SignWithPrivateKeyStr

func RsaSha256SignWithPrivateKeyStr(privateKeyStr []byte, data []byte) (string, error)

Types

type CertInfo

type CertInfo struct {
	Ver                int       `json:"ver"`                  // 证书版本
	No10               string    `json:"cert_no_10"`           // 证书序列号(十进制)
	No16               string    `json:"cert_no_16"`           // 证书序列号(十六进制)
	Subject            string    `json:"subject"`              // 证书主题
	StartTime          time.Time `json:"start_time"`           // 证书开始时间
	StopTime           time.Time `json:"stop_time"`            // 证书结束时间
	Issuer             string    `json:"issuer"`               // 证书颁发者
	PublicKeyAlgorithm string    `json:"public_key_algorithm"` // 公钥算法
	SignatureAlgorithm string    `json:"signature_algorithm"`  // 签名算法
	PublicKey          string    `json:"public_key"`           // 公钥
	Signature          string    `json:"signature"`            // 签名
	KeyUsage           int       `json:"key_usage"`            // 密钥用途
	SubjectKeyId       string    `json:"subject_key_id"`       // 主题密钥标识
	AuthorityKeyId     string    `json:"authority_key_id"`     // 颁发者密钥标识
}

func GetCertInfo

func GetCertInfo(certPEM string) (*CertInfo, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL