crypto

package
v0.0.0-...-619fe92 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2024 License: GPL-3.0 Imports: 17 Imported by: 0

README

crypto

go crypto library

加密算法

AES支持三种长度的密钥:128位,192位,256位,即AES128,AES192,AES256 AES256安全性最高 AES128性能最高

  • IV支持不传入值,默认生成且返回
  • 生成随机key,根据不同算法生成

IV

// 在除ECB以外的所有加密方式中,都需要用到IV对加密结果进行随机化。在使用同一种加密同一个密钥时不应该使用相同的IV,否则会失去一定甚至全部的安全性。

BlockMode

ECB 电码本模式 Electronic Codebook Book

ECB模式有一个显著的安全问题:如果使用相同的密钥, 那么相同的明文块就会生成相同的密文块,不能很好的隐藏数据模式,因此,在密码协议中不建议使用ECB模式

CBC 密码分组链接模式 Cipher Block Chaining

// BlockModeCBC CBC模式加密过程是串行的,不能并行化,速度比较慢,但是解密可以并行。另外,如果密文的某一位被修改了,只会使这个密文块所对应的明文块完全改变并且改变下一个明文块的对应位,安全性仍然有一定的欠缺。

CFB 密码反馈模式 Cipher FeedBack
CTR 计算器模式 Counter
OFB 输出反馈模式 Output FeedBack

参考资料:

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CBC cbc

CBC 密码块链模式(Cipher-block chaining) 每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。 同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。 CBC是最为常用的工作模式。它的主要缺点在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。 加密时,平文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个平文块。 因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的平文块完全改变和下一个平文块中对应位发生改变, 不会影响到其它平文的内容

View Source
var CFB cfb
View Source
var CTR ctr
View Source
var ECB ecbBlockMode

ECB 电子密码本模式(lectronic codebook) 最简单的模式,也是最不安全的模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密,相同明文会产生同样的密文组。 这会暴露明文数据的格式和统计特征,从而有潜在的安全风险,但是用于短数据(如加密密钥)时非常理想

View Source
var GCM gcm

GCM AE,Authenticated Encryption

View Source
var OFB ofb
View Source
var PKCS7Padding pkcs7Padding
View Source
var ZeroPadding zeroPadding

Functions

func ParsePKCS8PrivateKey

func ParsePKCS8PrivateKey(certPem []byte) (any, error)

ParsePKCS1PrivateKey 从 ASN.1 PEM 格式的证书中解析 PKCS #8 格式的私钥,PEM 块类型通常是 "PRIVATE KEY"

func ParsePKIXPublicKey

func ParsePKIXPublicKey(certPEM []byte) (any, error)

ParsePKIXPublicKey 从 ASN.1 PEM 格式的证书中解析 PKIX 格式的公钥,PEM 块类型通常是 "PUBLIC KEY"

func ParseRSAPKCS1PrivateKey

func ParseRSAPKCS1PrivateKey(certPem []byte) (*rsa.PrivateKey, error)

ParseRSAPKCS1PrivateKey 从 ASN.1 PEM 格式的证书中解析 PKCS #1 格式的 RSA 私钥,PEM 块类型通常是 "RSA PRIVATE KEY"

func ParseRSAPKCS1PublicKey

func ParseRSAPKCS1PublicKey(certPEM []byte) (*rsa.PublicKey, error)

ParseRSAPKCS1PublicKey 从 ASN.1 PEM 格式的证书中解析 PKCS #1 格式的 RSA 公钥,PEM 块类型通常是 "RSA PUBLIC KEY"

func ParseRSAPKCS8PrivateKey

func ParseRSAPKCS8PrivateKey(certPem []byte) (*rsa.PrivateKey, error)

ParseRSAPKCS8PrivateKey 从 ASN.1 PEM 格式的证书中解析 PKCS #8 格式的 RSA 私钥,PEM 块类型通常是 "PRIVATE KEY"

func ParseRSAPKIXPublicKey

func ParseRSAPKIXPublicKey(certPEM []byte) (*rsa.PublicKey, error)

ParseRSAPKIXPublicKey 从 ASN.1 PEM 格式的证书中解析中解析 PKIX 格式的 RSA 公钥,PEM 块类型通常是 "PUBLIC KEY"

func ParseRSAPrivateKey

func ParseRSAPrivateKey(certPEM []byte) (*rsa.PrivateKey, error)

ParseRSAPrivateKey 从 ASN.1 PEM 格式的证书中解析 PKCS #1 格式或者 PKCS #8 格式的 RSA 私钥

func ParseRSAPublicKey

func ParseRSAPublicKey(certPEM []byte) (*rsa.PublicKey, error)

ParseRSAPublicKey 从 ASN.1 PEM 格式的证书中解析 PKCS #1 格式或者 PKIX 格式的 RSA 公钥

func ParseRSAPublicKeyFromCert

func ParseRSAPublicKeyFromCert(certPEM []byte) (*rsa.PublicKey, error)

ParseRSAPublicKeyFromCert 从 ASN.1 PEM 格式的证书中解析 X.509 证书,并提取公钥

func RC4Encrypt

func RC4Encrypt(key, src []byte) []byte

Types

type AESCipher

type AESCipher struct {
	// contains filtered or unexported fields
}

AESCipher AES Advanced Encryption Standard 支持 ECB、CBC、CFB、CTR、GCM、OFB key 长度 16、24、32 位,即 128、192、256 bit(AES-128、AES-192、AES-256),位数越大安全性越高但加密速度越慢

func (*AESCipher) Decrypt

func (c *AESCipher) Decrypt(cipherTxt []byte) ([]byte, error)

func (*AESCipher) Encrypt

func (c *AESCipher) Encrypt(plainTxt []byte) ([]byte, error)

type BlockMode

type BlockMode interface {
	Encrypt(*cipherConfig, cipher.Block, []byte) ([]byte, error)
	Decrypt(*cipherConfig, cipher.Block, []byte) ([]byte, error)
}

type Cipher

type Cipher interface {
	Encrypt(plainTxt []byte) ([]byte, error)
	Decrypt(cipherTxt []byte) ([]byte, error)
}

func NewAES

func NewAES(key []byte, opts ...Option) Cipher

func NewDES

func NewDES(key []byte, opts ...Option) Cipher

func NewTripleDES

func NewTripleDES(key []byte, opts ...Option) Cipher

type DESCipher

type DESCipher struct {
	// contains filtered or unexported fields
}

func (*DESCipher) Decrypt

func (c *DESCipher) Decrypt(cipherTxt []byte) ([]byte, error)

func (*DESCipher) Encrypt

func (c *DESCipher) Encrypt(plainTxt []byte) ([]byte, error)

type Option

type Option func(*cipherConfig)

func WithAdditionalData

func WithAdditionalData(additionalData []byte) Option

gcm

func WithBlockMode

func WithBlockMode(bc BlockMode) Option

func WithIV

func WithIV(iv []byte) Option

func WithNonce

func WithNonce(nonce []byte) Option

func WithPaddingMode

func WithPaddingMode(padding PaddingMode) Option

func WithTagSize

func WithTagSize(tagSize int) Option

type PaddingMode

type PaddingMode interface {
	Padding([]byte, int) []byte
	UnPadding([]byte, int) ([]byte, error)
}

type RSACipher

type RSACipher struct {
	// contains filtered or unexported fields
}

func NewRSA

func NewRSA(opts ...RSACipherOption) (*RSACipher, error)

func (*RSACipher) DecryptOAEP

func (r *RSACipher) DecryptOAEP(hash hash.Hash, cipherText []byte, label []byte) ([]byte, error)

func (*RSACipher) DecryptOAEPBase64

func (r *RSACipher) DecryptOAEPBase64(hash hash.Hash, cipherText []byte, label []byte) ([]byte, error)

func (*RSACipher) DecryptOAEPHex

func (r *RSACipher) DecryptOAEPHex(hash hash.Hash, cipherText []byte, label []byte) ([]byte, error)

func (*RSACipher) DecryptPKCS1v15

func (r *RSACipher) DecryptPKCS1v15(cipherText []byte) ([]byte, error)

func (*RSACipher) DecryptPKCS1v15Base64

func (r *RSACipher) DecryptPKCS1v15Base64(cipherText []byte) ([]byte, error)

func (*RSACipher) DecryptPKCS1v15Hex

func (r *RSACipher) DecryptPKCS1v15Hex(cipherText []byte) ([]byte, error)

func (*RSACipher) EncryptOAEP

func (r *RSACipher) EncryptOAEP(hash hash.Hash, plainText []byte, label []byte) ([]byte, error)

func (*RSACipher) EncryptOAEPBase64

func (r *RSACipher) EncryptOAEPBase64(hash hash.Hash, plainText []byte, label []byte) ([]byte, error)

func (*RSACipher) EncryptOAEPHex

func (r *RSACipher) EncryptOAEPHex(hash hash.Hash, plainText []byte, label []byte) ([]byte, error)

func (*RSACipher) EncryptPKCS1v15

func (r *RSACipher) EncryptPKCS1v15(plainText []byte) ([]byte, error)

func (*RSACipher) EncryptPKCS1v15Base64

func (r *RSACipher) EncryptPKCS1v15Base64(plainText []byte) ([]byte, error)

func (*RSACipher) EncryptPKCS1v15Hex

func (r *RSACipher) EncryptPKCS1v15Hex(plainText []byte) ([]byte, error)

type RSACipherOption

type RSACipherOption func(*RSACipher)

func WithPrivateKey

func WithPrivateKey(priKey []byte) RSACipherOption

func WithPublicKey

func WithPublicKey(pubKey []byte) RSACipherOption

type RSAKeyGenerator

type RSAKeyGenerator struct {
	// contains filtered or unexported fields
}

RSAKeyGenerator 生成 RSA 密钥对 密钥长度推荐使用 2048 位或者更高 私钥格式和公钥格式可以随意组合

func NewRSAKeyGenerator

func NewRSAKeyGenerator(bits int) *RSAKeyGenerator

NewRSAKeyGenerator 生成 RSA 密钥对

func NewRSAKeyGenerator1024

func NewRSAKeyGenerator1024() *RSAKeyGenerator

NewRSAKeyGenerator1024 生成 1024 位的 RSA 密钥对,密钥长度推荐使用 2048 位或者更高

func NewRSAKeyGenerator2048

func NewRSAKeyGenerator2048() *RSAKeyGenerator

NewRSAKeyGenerator2048 生成 2048 位的 RSA 密钥对

func NewRSAKeyGenerator4096

func NewRSAKeyGenerator4096() *RSAKeyGenerator

NewRSAKeyGenerator3072 生成 3072 位的 RSA 密钥对

func (*RSAKeyGenerator) PKCS1PrivateKeyDER

func (r *RSAKeyGenerator) PKCS1PrivateKeyDER() ([]byte, error)

PKCS1PrivateKeyDER 生成 PKCS #1 标准 DER 格式的 RSA 私钥

func (*RSAKeyGenerator) PKCS1PrivateKeyPEM

func (r *RSAKeyGenerator) PKCS1PrivateKeyPEM() ([]byte, error)

PKCS1PrivateKey 生成 PKCS #1 标准 PEM 格式的 RSA 私钥

func (*RSAKeyGenerator) PKCS1PublicKeyDER

func (r *RSAKeyGenerator) PKCS1PublicKeyDER() ([]byte, error)

PKCS1PublicKeyDER 生成 PKCS #1 标准 DER 格式的 RSA 公钥

func (*RSAKeyGenerator) PKCS1PublicKeyPEM

func (r *RSAKeyGenerator) PKCS1PublicKeyPEM() ([]byte, error)

PKCS1PublicKeyPEM 生成 PKCS #1 标准 PEM 格式的 RSA 公钥

func (*RSAKeyGenerator) PKCS8PrivateKeyDER

func (r *RSAKeyGenerator) PKCS8PrivateKeyDER() ([]byte, error)

PKCS8PrivateKeyDER 生成 PKCS #8 标准 DER 格式的 RSA 私钥

func (*RSAKeyGenerator) PKCS8PrivateKeyPEM

func (r *RSAKeyGenerator) PKCS8PrivateKeyPEM() ([]byte, error)

PKCS8PrivateKeyPEM 生成 PKCS #8 标准 PEM 格式的 RSA 私钥

func (*RSAKeyGenerator) PKIXPublicKeyDER

func (r *RSAKeyGenerator) PKIXPublicKeyDER() ([]byte, error)

PKIXPublicKeyDER 生成 PKIX 标准 DER 格式的 RSA 公钥

func (*RSAKeyGenerator) PKIXPublicKeyPEM

func (r *RSAKeyGenerator) PKIXPublicKeyPEM() ([]byte, error)

PKIXPublicKeyPEM 生成 PKIX 标准 PEM 格式的 RSA 公钥

type TripleDESCipher

type TripleDESCipher struct {
	// contains filtered or unexported fields
}

func (*TripleDESCipher) Decrypt

func (c *TripleDESCipher) Decrypt(cipherTxt []byte) ([]byte, error)

func (*TripleDESCipher) Encrypt

func (c *TripleDESCipher) Encrypt(plainTxt []byte) ([]byte, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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