first commit

This commit is contained in:
Yangtao
2025-11-18 17:48:20 +08:00
commit 6e56cab848
196 changed files with 65809 additions and 0 deletions

View File

@ -0,0 +1,146 @@
package HyTools
import (
"bytes"
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"errors"
)
// RSA加密
func RsaEncrypt(origData string, publicKey string) (string, error) {
block, _ := pem.Decode([]byte(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)
partLen := pub.N.BitLen()/8 - 11
chunks := ByteSplit([]byte(origData), partLen)
buffer := bytes.NewBufferString("")
for _, chunk := range chunks {
bytes, err := rsa.EncryptPKCS1v15(rand.Reader, pub, chunk)
if err != nil {
return "", err
}
buffer.Write(bytes)
}
return base64.StdEncoding.EncodeToString(buffer.Bytes()), nil
}
// RSA解密
func RsaDecrypt(ciphertext string, privateKey string) (string, error) {
block, _ := pem.Decode([]byte(privateKey))
if block == nil {
return "", errors.New("private key error!")
}
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return "", err
}
partLen := priv.N.BitLen() / 8
raw, err := base64.StdEncoding.DecodeString(ciphertext)
chunks := ByteSplit([]byte(raw), partLen)
buffer := bytes.NewBufferString("")
for _, chunk := range chunks {
decrypted, err := rsa.DecryptPKCS1v15(rand.Reader, priv, chunk)
if err != nil {
return "", err
}
buffer.Write(decrypted)
}
return buffer.String(), err
}
// RSA SHA1加签
func RsaSHA1Sign(data string, privateKey string) (string, error) {
block, _ := pem.Decode([]byte(privateKey))
if block == nil {
return "", errors.New("Sign private key decode error")
}
prk8, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return "", err
}
h := sha1.New()
h.Write([]byte(data))
hashed := h.Sum(nil)
sign, err := rsa.SignPKCS1v15(rand.Reader, prk8, crypto.SHA1, hashed)
if err != nil {
return "", err
}
return base64.StdEncoding.EncodeToString(sign), err
}
// RSA SHA1验签
func RsaSHA1Verify(data string, sign string, publicKey string) error {
h := sha1.New()
h.Write([]byte(data))
hashed := h.Sum(nil)
decodedSign, err := base64.StdEncoding.DecodeString(sign)
if err != nil {
return err
}
block, _ := pem.Decode([]byte(publicKey))
if block == nil {
return errors.New("Sign public key decode error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) //解析pem.Decode返回的Block指针实例
if err != nil {
return err
}
pub := pubInterface.(*rsa.PublicKey)
return rsa.VerifyPKCS1v15(pub, crypto.SHA1, hashed, decodedSign)
}