gocrypto

package
v1.4.1 Latest Latest
Warning

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

Go to latest
Published: Nov 16, 2022 License: MIT Imports: 19 Imported by: 1

README

gocrypto

封装的常用加密和解密包,包括hash、aes、des、rsa。


安装

go get -u github.com/zhufuyi/pkg/gocrypto


使用示例

hash 单向加密

共有几个常用Md5、Sha1、Sha256、Sha512函数和Hash集合,使用示例:

    var hashRawData = []byte("hash|abcdefghijklmnopqrstuvwxyz1234567890")

    // 常用的几个独立的hash函数
    gocrypto.Md5(hashRawData)
    gocrypto.Sha1(hashRawData)
    gocrypto.Sha256(hashRawData)
    gocrypto.Sha512(hashRawData)

    // hash集合,根据哈希类型指定执行对应哈希函数
    gocrypto.Hash(crypto.MD5, hashRawData)
    gocrypto.Hash(crypto.SHA3_224, hashRawData)
    gocrypto.Hash(crypto.SHA256, hashRawData)
    gocrypto.Hash(crypto.SHA3_224, hashRawData)
    gocrypto.Hash(crypto.BLAKE2s_256, hashRawData)
    // ..... 支持crypto包hash类型

AES 加密解密

AES(Advanced Encryption Standard)高级加密标准,旨在取代DES,共有四种分组加密模式:ECB CBC CFB CTR。

共有四个函数AesEncrypt、AesDecrypt、AesEncryptHex、AesDecryptHex,使用示例:

    var (
        aesRawData = []byte("aes|abcdefghijklmnopqrstuvwxyz1234567890")
        aesKey     = []byte("aesKey1234567890aesKey1234567890")
    )

    // (1) AesEncrypt和AesDecrypt函数的参数有默认值:模式=ECB,可以修改为CBC CFB CTR,默认值key,可以自定义修改

    // 默认模式ECB,默认key
    cypherData, _ := gocrypto.AesEncrypt(aesRawData) // 加密,返回密文未经过转码
    raw, _ := gocrypto.AesDecrypt(cypherData) // 解密,返回原文

    // 默认模式ECB,自定义key,key长度必须是16、24、32其中一个
    cypherData, _ := gocrypto.AesEncrypt(aesRawData, WithAesKey(aesKey)) // 加密,返回密文未经过转码
    raw, _ := gocrypto.AesDecrypt(cypherData, WithAesKey(aesKey)) // 解密,返回原文

    // 模式CTR,默认key
    cypherData, _ := gocrypto.AesEncrypt(aesRawData, WithAesModeCTR()) // 加密,返回密文未经过转码
    raw, _ := gocrypto.AesDecrypt(cypherData, WithAesModeCTR()) // 解密,返回原文

    // 模式CBC,自定义key,key长度必须是16、24、32其中一个
    cypherData, _ := gocrypto.AesEncrypt(aesRawData, WithAesModeECB(), WithAesKey(aesKey)) // 加密,返回密文未经过转码
    raw, _ := gocrypto.AesDecrypt(cypherData, WithAesModeECB(), WithAesKey(aesKey))        // 解密,返回原文


    // (2) AesEncryptHex和AesDecryptHex函数,这两个函数的密文是经过hex转码,使用方式与AesEncrypt、AesDecrypt完全一样。


DES 加密解密

DES(Data Encryption Standard)数据加密标准,是目前最为流行的加密算法之一 ,共有四种分组加密模式:ECB CBC CFB CTR。

共有四个函数DesEncrypt、DesDecrypt、DesEncryptHex、DesDecryptHex,使用示例:

    var (
        desRawData = []byte("des|abcdefghijklmnopqrstuvwxyz1234567890")
        desKey     = []byte("desKey1234567890desKey1234567890")
    )

    // (1) DesEncrypt和DesDecrypt函数的参数有默认值:模式=ECB,可以修改为CBC CFB CTR,默认值key,可以自定义修改

    // 默认模式ECB,默认key
    cypherData, _ := gocrypto.DesEncrypt(desRawData) // 加密,返回密文未经过转码
    raw, _ := gocrypto.DesDecrypt(cypherData) // 解密,返回原文

    // 默认模式ECB,自定义key,key长度必须是16、24、32其中一个
    cypherData, _ := gocrypto.DesEncrypt(desRawData, WithDesKey(desKey)) // 加密,返回密文未经过转码
    raw, _ := gocrypto.DesDecrypt(cypherData, WithDesKey(desKey)) // 解密,返回原文

    // 模式CTR,默认key
    cypherData, _ := gocrypto.DesEncrypt(desRawData, WithDesModeCTR()) // 加密,返回密文未经过转码
    raw, _ := gocrypto.DesDecrypt(cypherData, WithDesModeCTR()) // 解密,返回原文

    // 模式CBC,自定义key,key长度必须是16、24、32其中一个
    cypherData, _ := gocrypto.DesEncrypt(desRawData, WithDesModeECB(), WithDesKey(desKey)) // 加密,返回密文未经过转码
    raw, _ := gocrypto.DesDecrypt(cypherData, WithDesModeECB(), WithDesKey(desKey))        // 解密,返回原文


    // (2) DesEncryptHex和DesDecryptHex函数,这两个函数的密文是经过hex转码,使用方式与DesEncrypt、DesDecrypt完全一样。


RSA非对称加密

RSA加密和解密

公钥用来加密,私钥用来解密,例如别人用公钥加密加密信息发送给你,你有私钥可以解密出信息内容。加密解密共有4个函数RsaEncrypt、RsaDecrypt、RsaEncryptHex、RsaDecryptHex,使用示例:

    var (
        rsaRawData = []byte("rsa|abcdefghijklmnopqrstuvwxyz1234567890")
    )

    // (1) RsaEncrypt和RsaDecrypt函数的参数有默认值:密钥对格式=PKCS#1,可以修改为PKCS#8

    // 默认密钥对PKCS#1
    cypherData, _ := gocrypto.RsaEncrypt(publicKey, rsaRawData) // 加密,返回密文未经过转码
    raw, _ := gocrypto.RsaDecrypt(privateKey, cypherData) // 解密,返回原文

    // 密钥对PKCS#8
    cypherData, _ := gocrypto.RsaEncrypt(publicKey, rsaRawData, WithRsaFormatPKCS8()) // 加密,返回密文未经过转码
    raw, _ := gocrypto.RsaDecrypt(privateKey, cypherData, WithRsaFormatPKCS8()) // 解密,返回原文


    // (2) RsaEncryptHex和RsaDecryptHex,这两个函数的密文是经过hex转码的,使用方式与RsaEncrypt、RsaDecrypt完全一样。

RSA签名和验签

私钥用来签名,公钥用来验签,例如你用私钥对身份签名,别人通过公钥对签名验证得到你身份是否可信任的。签名和验签共有四个函数RsaSign、RsaVerify、RsaSignBase64、RsaVerifyBase64,使用示例:

    var (
        rsaRawData = []byte("rsa|abcdefghijklmnopqrstuvwxyz1234567890")
    )

    // (1) RsaEncrypt和RsaDecrypt函数的参数有默认值:密钥对格式=PKCS#1,可以修改为PKCS#8,默认值哈希=sha1,可以修改为多种哈希类型

    // 默认密钥对PKCS#1,默认哈希sha1
    signData, _ := gocrypto.RsaEncrypt(privateKey, rsaRawData) // 签名,返回密文未经过转码
    err := gocrypto.RsaDecrypt(publicKey, rsaRawData, signData) // 验签

    // 默认密钥对PKCS#1,使用哈希sha256
    signData, _ := gocrypto.RsaEncrypt(privateKey, rsaRawData, WithRsaHashTypeSha256()) // 签名,返回密文未经过转码
    err := gocrypto.RsaDecrypt(publicKey, rsaRawData, signData, WithRsaHashTypeSha256()) // 验签

    // 密钥对PKCS#8,默认哈希sha1
    signData, _ := gocrypto.RsaEncrypt(privateKey, rsaRawData, WithRsaFormatPKCS8()) // 签名,返回密文未经过转码
    err := gocrypto.RsaDecrypt(publicKey, rsaRawData, signData, WithRsaFormatPKCS8()) // 验签

    // 密钥对PKCS#8,哈希sha512
    signData, _ := gocrypto.RsaEncrypt(privateKey, rsaRawData, WithRsaFormatPKCS8(), WithRsaHashTypeSha512()) // 签名,返回密文未经过转码
    err := gocrypto.RsaDecrypt(publicKey, rsaRawData, signData, WithRsaFormatPKCS8(), WithRsaHashTypeSha512()) // 验签


    // (2) RsaSignBase64和RsaVerifyBase64这两个函数的密文是经过base64转码的,使用方式与RsaEncrypt、RsaDecrypt完全一样。


密码哈希和校验

用户注册的密码经过哈希存储在数据库,登录的密码比较哈希值是否一直来判断密码是否正确,保证只有用户知道密码明文。

	pwd := "123"

	hashStr, err := HashAndSaltPassword(pwd)
	if err != nil {
		return err
	}


	ok := VerifyPassword(pwd, hashStr)
	if !ok {
		return errors.New("passwords mismatch")
	}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AesDecrypt

func AesDecrypt(cipherData []byte, opts ...AesOption) ([]byte, error)

AesDecrypt aes解密byte,参数输入未经过转码的密文

func AesDecryptHex

func AesDecryptHex(cipherStr string, opts ...AesOption) (string, error)

AesDecryptHex aes解密string,参数输入已经转码的密文字符串

func AesEncrypt

func AesEncrypt(rawData []byte, opts ...AesOption) ([]byte, error)

AesEncrypt aes加密byte,返回的密文未经过转码

func AesEncryptHex

func AesEncryptHex(rawData string, opts ...AesOption) (string, error)

AesEncryptHex aes加密string,返回的密文已经转码

func DesDecrypt

func DesDecrypt(cipherData []byte, opts ...DesOption) ([]byte, error)

DesDecrypt des解密byte,参数输入未经过转码的密文

func DesDecryptHex

func DesDecryptHex(cipherStr string, opts ...DesOption) (string, error)

DesDecryptHex des解密string,参数输入已经转码的密文字符串

func DesEncrypt

func DesEncrypt(rawData []byte, opts ...DesOption) ([]byte, error)

DesEncrypt des加密byte,返回的密文未经过转码

func DesEncryptHex

func DesEncryptHex(rawData string, opts ...DesOption) (string, error)

DesEncryptHex des加密string,返回的密文已经转码

func Hash

func Hash(hashType crypto.Hash, rawData []byte) (string, error)

Hash 哈希

func HashAndSaltPassword added in v1.3.0

func HashAndSaltPassword(password string) (string, error)

HashAndSaltPassword 对密码加盐哈希

func Md5

func Md5(rawData []byte) string

Md5 字符md5哈希

func RsaDecrypt

func RsaDecrypt(privateKey []byte, cipherData []byte, opts ...RsaOption) ([]byte, error)

RsaDecrypt rsa解密byte,参数输入未经过转码的密文

func RsaDecryptHex

func RsaDecryptHex(privateKey []byte, cipherHex string, opts ...RsaOption) (string, error)

RsaDecryptHex rsa解密,返回原文

func RsaEncrypt

func RsaEncrypt(publicKey []byte, rawData []byte, opts ...RsaOption) ([]byte, error)

RsaEncrypt rsa加密byte,返回的密文未经过转码

func RsaEncryptHex

func RsaEncryptHex(publicKey []byte, rawData []byte, opts ...RsaOption) (string, error)

RsaEncryptHex rsa加密,返回hex

func RsaSign

func RsaSign(privateKey []byte, rawData []byte, opts ...RsaOption) ([]byte, error)

RsaSign rsa签名byte,返回的密文未经过转码

func RsaSignBase64

func RsaSignBase64(privateKey []byte, rawData []byte, opts ...RsaOption) (string, error)

RsaSignBase64 rsa签名,返回base64

func RsaVerify

func RsaVerify(publicKey []byte, rawData []byte, signData []byte, opts ...RsaOption) error

RsaVerify rsa验签

func RsaVerifyBase64

func RsaVerifyBase64(publicKey []byte, rawData []byte, signBase64 string, opts ...RsaOption) error

RsaVerifyBase64 rsa验签

func Sha1

func Sha1(rawData []byte) string

Sha1 字符sha1哈希

func Sha256

func Sha256(rawData []byte) string

Sha256 字符sha256哈希

func Sha512

func Sha512(rawData []byte) string

Sha512 字符sha512哈希

func VerifyPassword added in v1.3.0

func VerifyPassword(password string, hashed string) bool

VerifyPassword 验证密码和密文是否匹配

Types

type AesOption

type AesOption func(*aesOptions)

AesOption set the aes options.

func WithAesKey

func WithAesKey(key []byte) AesOption

WithAesKey set aes key

func WithAesModeCBC

func WithAesModeCBC() AesOption

WithAesModeCBC set mode to CBC

func WithAesModeCFB

func WithAesModeCFB() AesOption

WithAesModeCFB set mode to CFB

func WithAesModeCTR

func WithAesModeCTR() AesOption

WithAesModeCTR set mode to CTR

func WithAesModeECB

func WithAesModeECB() AesOption

WithAesModeECB set mode to ECB

type DesOption

type DesOption func(*desOptions)

DesOption set the des options.

func WithDesKey

func WithDesKey(key []byte) DesOption

WithDesKey set des key

func WithDesModeCBC

func WithDesModeCBC() DesOption

WithDesModeCBC set mode to CBC

func WithDesModeCFB

func WithDesModeCFB() DesOption

WithDesModeCFB set mode to CFB

func WithDesModeCTR

func WithDesModeCTR() DesOption

WithDesModeCTR set mode to CTR

func WithDesModeECB

func WithDesModeECB() DesOption

WithDesModeECB set mode to ECB

type RsaOption

type RsaOption func(*rsaOptions)

RsaOption set the rsa options.

func WithRsaFormatPKCS1

func WithRsaFormatPKCS1() RsaOption

WithRsaFormatPKCS1 set format

func WithRsaFormatPKCS8

func WithRsaFormatPKCS8() RsaOption

WithRsaFormatPKCS8 set format

func WithRsaHashType

func WithRsaHashType(hash crypto.Hash) RsaOption

WithRsaHashType set hash type

func WithRsaHashTypeMd5

func WithRsaHashTypeMd5() RsaOption

WithRsaHashTypeMd5 set hash type

func WithRsaHashTypeSha1

func WithRsaHashTypeSha1() RsaOption

WithRsaHashTypeSha1 set hash type

func WithRsaHashTypeSha256

func WithRsaHashTypeSha256() RsaOption

WithRsaHashTypeSha256 set hash type

func WithRsaHashTypeSha512

func WithRsaHashTypeSha512() RsaOption

WithRsaHashTypeSha512 set hash type

Directories

Path Synopsis
nolint
nolint

Jump to

Keyboard shortcuts

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