赞
踩
1.加密方法
func (r *XRsa) SignSHA1withRSA(data string) (string, error) {
// PrivateSign 生成私钥签名(SHA1withRSA)
hash := sha1.Sum([]byte(data)) // 使用 SHA1 哈希算法
encrypted, err := rsa.SignPKCS1v15(rand.Reader, r.PrivateKey, crypto.SHA1, hash[:])
if err != nil {
return "", err
}
signature := base64.StdEncoding.EncodeToString(encrypted)
return signature, nil
}
2.解密方法
func DecryptByHex(encryptedHex, key string) (string, error) { keyBytes, err := base64.StdEncoding.DecodeString(key) if err != nil { return "", fmt.Errorf("无效的密钥,无法解码为 base64 字符串") } if len(keyBytes) != 16 { // AES-128的密钥长度应为16字节 return "", fmt.Errorf("密钥长度无效,应为 16 字节") } encryptedBytes, err := hex.DecodeString(encryptedHex) if err != nil { return "", fmt.Errorf("无效的十六进制字符串,无法解码为字节数组") } block, err := aes.NewCipher(keyBytes) if err != nil { return "", err } decryptedBytes := make([]byte, len(encryptedBytes)) for i := 0; i < len(encryptedBytes); i += aes.BlockSize { block.Decrypt(decryptedBytes[i:i+aes.BlockSize], encryptedBytes[i:i+aes.BlockSize]) } decryptedBytes = PKCS5Unpadding(decryptedBytes) return string(decryptedBytes), nil }
3.使用
4.PKSC5的封装
// PKCS5去填充
func PKCS5Unpadding(src []byte) []byte {
length := len(src)
unpadding := int(src[length-1])
return src[:(length - unpadding)]
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。