golang中的加解密

参考

源码地址https://github.com/hua345/golangEncrypt

openssl生成私钥

openssl genrsa -out rsa_private_key.pem 1024

openssl生成公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

编码方式

hex

hex也称为base16,意思是使用16个可见字符来表示一个二进制数组,编码后数据大小将翻倍,因为1个字符需要用2个可见字符来表示。

hex.DecodeString(s string)//解密
hex.EncodeToString(src []byte) string//加密
base64

使用64个可见字符来表示一个二进制数组,编码后数据大小变成原来的4/3,也即3个字符用4个可见字符来表示。

base64.StdEncoding.DecodeString(s string) ([]byte, error)//解密
base64.StdEncoding.EncodeToString(src []byte) string//加密

私钥的格式

解析私钥的方式如下:

#PKCS1
x509.ParsePKCS1PrivateKey(der []byte) (key interface{}, err error)
#PKCS8
x509.ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)

单向加密算法

简而言之就是不可解密的加密方法

第一是任意两段明文数据,加密以后的密文不能是相同的;
第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。

MD5
package main
import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
)
func main(){
    hash := md5.New()
    hash.Write([]byte("test md5 encrypto"))
    encryptedData := hash.Sum(nil)
    fmt.Println("md5:", hex.EncodeToString(encryptedData))
}

中通过md5.New()初始化一个MD5对象,其实它是一个hash.Hash对象。 函数原型为:

func New() hash.Hash

该对象实现了hash.Hash的Sum接口:计算出校验和。其函数原型 为:

func Sum(data []byte) [Size]byte
SHA1
hash := sha1.New()
hash.Write([]byte(originalData))
encryptedData, err := rsa.SignPKCS1v15(rand.Reader, prvKey, crypto.SHA1, hash.Sum(nil))
SHA256
hash := sha256.New()
hash.Write([]byte(originalData))
encryptedData, err := rsa.SignPKCS1v15(rand.Reader, prvKey, crypto.SHA256, hash.Sum(nil))
HMAC_SHA1

HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的,而SHA1不需要。

import (
	"crypto/hmac"
	"crypto/sha1"
)
func main(){
    key := []byte("123456")
    mac := hmac.New(sha1.New, key)
    mac.Write(originalData)
    fmt.Println("hmac:", hex.EncodeToString(mac.Sum(nil)))
}

RSA非对称加密

主要有加密/解密、签名/验签4中方式,且加密/解密与签名/验签均是一个相反的过程。两对是根据对公钥及私钥的使用划分的。

加密/解密是采用公钥加密,私钥解密。
签名/验签是采用私钥签名,公钥验签。

#加密
rsa.EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) ([]byte, error)
#解密
rsa.DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)
#签名
rsa.SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)
#验签
rsa.VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error

AES对称加密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值