1 Star 0 Fork 0

andrew.zhang / libgo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
crypto_hash.go 3.14 KB
一键复制 编辑 原始数据 按行查看 历史
andrew.zhang 提交于 2022-10-31 06:14 . 整理以前代码中...
package zbutil
import (
"crypto"
"crypto/md5"
"crypto/rsa"
"crypto/sha256"
"crypto/sha512"
"crypto/x509"
"encoding/base64"
"encoding/hex"
"encoding/pem"
"errors"
)
// 加密
func RsaEncrypt(origData []byte, publicKey []byte) ([]byte, error) {
block, _ := pem.Decode(publicKey) //将密钥解析成公钥实例
if block == nil {
return nil, errors.New("public key error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) //解析pem.Decode()返回的Block指针实例
if err != nil {
return nil, err
}
pub := pubInterface.(*rsa.PublicKey)
return rsa.EncryptPKCS1v15( /*rand.Reader*/ nil, pub, origData) //RSA算法加密
}
// 解密
func RsaDecrypt(ciphertext []byte, privateKey []byte) ([]byte, error) {
block, _ := pem.Decode(privateKey) //将密钥解析成私钥实例
if block == nil {
return nil, errors.New("private key error!")
}
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) //解析pem.Decode()返回的Block指针实例
if err != nil {
return nil, err
}
return rsa.DecryptPKCS1v15(nil, priv, ciphertext) //RSA算法解密
}
// 签名
func RsaSign(signedtxt []byte, privateKey []byte) ([]byte, error) {
block, _ := pem.Decode(privateKey) //将密钥解析成私钥实例
if block == nil {
return nil, errors.New("private key error!")
}
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) //解析pem.Decode()返回的Block指针实例
if err != nil {
return nil, err
}
l_hashed := sha512.Sum512(signedtxt)
return rsa.SignPKCS1v15(nil, priv, crypto.SHA512 /*0*/, l_hashed[:])
}
// 验证签名
func RsaVerify(signedtxt, signdata []byte, publicKey []byte) error {
block, _ := pem.Decode(publicKey) //将密钥解析成公钥实例
if block == nil {
return errors.New("public key error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) //解析pem.Decode()返回的Block指针实例
if err != nil {
return err
}
pub := pubInterface.(*rsa.PublicKey)
l_hashed := sha512.Sum512(signedtxt)
return rsa.VerifyPKCS1v15(pub, crypto.SHA512 /*0*/, l_hashed[:], signdata)
}
// md5验证
func Md5Bin(src []byte) []byte {
h := md5.New()
h.Write((src)) // 需要加密的字符串为
return h.Sum(nil) // 输出加密结果
}
// md5验证
func Md5Str(src string) string {
return hex.EncodeToString(Md5Bin([]byte(src))) // 输出加密结果
}
// sha256指纹
func Sha256Bin(src []byte) []byte {
h := sha256.New()
h.Write(src) // 需要加密的字符串为
return h.Sum(nil) // 输出加密结果
}
// sha256指纹
func Sha256Str(src string) string {
return hex.EncodeToString(Sha256Bin([]byte(src))) // 输出加密结果
}
// sha512指纹
func Sha512Bin(src []byte) []byte {
h := sha512.New()
h.Write(src) // 需要加密的字符串为
return h.Sum(nil) // 输出加密结果
}
// sha512指纹
func Sha512Str(src string) string {
return hex.EncodeToString(Sha512Bin([]byte(src))) // 输出加密结果
}
// base编码
func Base64EncodeStr(bin []byte) string {
return base64.StdEncoding.EncodeToString(bin)
}
// base解码
func Base64DecodeStr(base64str string) []byte {
l_bin, err := (base64.StdEncoding.DecodeString(base64str))
if err != nil {
return nil
}
return l_bin
}
Go
1
https://gitee.com/andrewzh/libgo.git
git@gitee.com:andrewzh/libgo.git
andrewzh
libgo
libgo
v1.0.3

搜索帮助