`

golang非对称rsa加解密

 
阅读更多
package main
 
import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/base64"
    "encoding/pem"
    "errors"
    "flag"
    "fmt"
)
 
var decrypted string
 
func init() {
    flag.StringVar(&decrypted, "d", "", "加密过的数据")
    flag.Parse()
}
 
func main() {
    var data []byte
    var err error
    if decrypted != "" {
        data, err = base64.StdEncoding.DecodeString(decrypted)
        if err != nil {
            panic(err)
        }
    } else {
        data, err = RsaEncrypt([]byte("polaris@studygolang.com"))
        if err != nil {
            panic(err)
        }
        fmt.Println("rsa encrypt base64:" + base64.StdEncoding.EncodeToString(data))
    }
    origData, err := RsaDecrypt(data)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(origData))
}
 
// 公钥和私钥可以从文件中读取
var privateKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y
7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7
Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQAB
AoGBAJlNxenTQj6OfCl9FMR2jlMJjtMrtQT9InQEE7m3m7bLHeC+MCJOhmNVBjaM
ZpthDORdxIZ6oCuOf6Z2+Dl35lntGFh5J7S34UP2BWzF1IyyQfySCNexGNHKT1G1
XKQtHmtc2gWWthEg+S6ciIyw2IGrrP2Rke81vYHExPrexf0hAkEA9Izb0MiYsMCB
/jemLJB0Lb3Y/B8xjGjQFFBQT7bmwBVjvZWZVpnMnXi9sWGdgUpxsCuAIROXjZ40
IRZ2C9EouwJBAOPjPvV8Sgw4vaseOqlJvSq/C/pIFx6RVznDGlc8bRg7SgTPpjHG
4G+M3mVgpCX1a/EU1mB+fhiJ2LAZ/pTtY6sCQGaW9NwIWu3DRIVGCSMm0mYh/3X9
DAcwLSJoctiODQ1Fq9rreDE5QfpJnaJdJfsIJNtX1F+L3YceeBXtW0Ynz2MCQBI8
9KP274Is5FkWkUFNKnuKUK4WKOuEXEO+LpR+vIhs7k6WQ8nGDd4/mujoJBr5mkrw
DPwqA3N5TMNDQVGv8gMCQQCaKGJgWYgvo3/milFfImbp+m7/Y3vCptarldXrYQWO
AQjxwc71ZGBFDITYvdgJM1MTqc8xQek1FXn1vfpy2c6O
-----END RSA PRIVATE KEY-----
`)
 
var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZsfv1qscqYdy4vY+P4e3cAtmv
ppXQcRvrF1cB4drkv0haU24Y7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0Dgacd
wYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NL
AUeJ6PeW+DAkmJWF6QIDAQAB
-----END PUBLIC KEY-----
`)
 
// 加密
func RsaEncrypt(origData []byte) ([]byte, error) {
    block, _ := pem.Decode(publicKey)
    if block == nil {
        return nil, errors.New("public key error")
    }
    pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
    if err != nil {
        return nil, err
    }
    pub := pubInterface.(*rsa.PublicKey)
    return rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
}
 
// 解密
func RsaDecrypt(ciphertext []byte) ([]byte, error) {
    block, _ := pem.Decode(privateKey)
    if block == nil {
        return nil, errors.New("private key error!")
    }
    priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
    if err != nil {
        return nil, err
    }
    return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
}

 

分享到:
评论

相关推荐

    文件非对称加密解密工具(RSA).exe

    本工具是用于golang编写的,用于rsa非对称加密技术实现的对字符串的加密解密工具,可以对文件进行加密解密(txt、docx、xls文档等)。对文档加密会对文档同目录下生成一个后缀名加.hh的文档。 操作说明: 一、对字符...

    RSA非对称加解密demo-go语言版

    RSA加解密demo go语言版本,代码简洁,可直接使用,适合用来做非对称加解密应用。也适合用来做算法研究使用。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·...

    Golang加密解密之RSA(附带php)

    RSA加密算法是一种非对称加密算法,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家在1977年共同提出。该算法的名字正是取自这三位发明者姓氏的首字母...

    Go-go语言封装的各种对称加密和非对称加密

    本项目"Go-go语言封装的各种对称加密和非对称加密"正是针对这一需求,提供了便捷的Go语言实现,包括3重DES、AES的CBC和CTR模式以及RSA非对称加密。下面将详细介绍这些加密算法及其在Go中的应用。 1. 对称加密: - ...

    Golang常见加密解密算法源码.zip

    2. **非对称加密**:非对称加密如RSA、ECC(Elliptic Curve Cryptography)使用一对公钥和私钥,公钥用于加密,私钥用于解密。这种方式更安全,但计算复杂度较高。了解Go中如何实现这些算法,对于理解公钥基础设施...

    文件加密解密工具(文件夹下多文件加密解密)

    非对称加密则使用一对公钥和私钥,如RSA、ECC等。在本例中,由于没有具体提及使用的加密算法,我们可以假设它可能使用了常见的对称加密方式,因为这种方式在处理大量数据时效率更高。 解密则是加密的逆过程,通过...

    golang解析数字证书

    4. **PKCS#8**:这是一个用于非对称密钥的通用加密标准,不仅支持RSA,还支持其他算法如ECDSA。它定义了私钥的封装方式,可以是PEM或DER编码。 在Golang中,我们可以使用内置的`crypto/x509`包来处理这些任务。以下...

    golang.org.rar

    2. **RSA加密**:RSA是一种非对称加密算法,通常用于密钥交换和数字签名。`crypto/rsa`包提供了RSA的实现。RSA的关键在于一对公钥和私钥,公钥用于加密,私钥用于解密。以下是一个简单的RSA加密示例: ```go import...

    QT字符串加密解密源码,我还有相同加密方法的php、C#、QT、golang、java版本

    另一方面,非对称加密(如RSA)使用一对公钥和私钥,公钥用于加密,私钥用于解密,解决了密钥分发的问题,但计算效率相对较低。 对于跨语言通信,一致性是关键。无论使用哪种语言,加密解密的实现必须遵循相同的...

    椭圆曲线非对称加密算法

    与传统的RSA等非对称加密算法相比,ECC在安全性相当的情况下,具有密钥更短、计算效率更高的优势,因此在资源有限的设备如移动设备和物联网设备中被广泛采用。 **椭圆曲线理论基础** 椭圆曲线是由方程y^2 = x^3 + ...

    php字符串加密解密,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

    RSA则是一种非对称加密算法,它使用一对公钥和私钥进行加解密。公钥可以公开,私钥必须保密。在PHP中,`openssl_pkey_new`用于生成密钥对,`openssl_public_encrypt`和`openssl_private_decrypt`用于加解密。 接...

    java字符串加密解密源码,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

    2. **非对称加密**:使用一对公钥和私钥,公钥用于加密,私钥用于解密,如RSA、DSA(Digital Signature Algorithm)。非对称加密安全性高,但相对对称加密速度慢,适用于证书认证、数字签名等场景。 在Java中,我们...

    设计用golang编写的加密器。_Go_下载.zip

    创建公钥和私钥,进行加解密操作,这里略过具体代码,因为涉及到的步骤相对复杂,包括生成密钥对、公钥的PEM编码和解码等。 在设计加密器时,还需要考虑其他因素,比如错误处理、密钥管理、安全编码实践(如避免SQL...

    Go语言加密解密:crypto包的神秘面纱

    这段代码展示了如何使用 RSA 非对称加密算法进行解密。首先,从文件中读取私钥,然后解析 PEM 编码的私钥。接着,使用 `rsa.DecryptPKCS1v15` 函数来解密之前加密的数据。 #### 结论 Go 语言的 `crypto` 包为开发者...

    openssl_rsa_sha256签名.zip

    **RSA**(Rivest-Shamir-Adleman)是一种非对称加密算法,由两个密钥组成:公钥和私钥。公钥用于加密数据,而私钥用于解密。在这个场景中,私钥用于对数据的哈希值进行签名,以验证数据的完整性和来源。 **SHA256**...

    alipay, 支付宝集成接口的 golang 实现.zip

    - RSA非对称加密:商户私钥用于签名,支付宝公钥用于验证。Golang中的`crypto/rsa`和`crypto/x509`包处理加密和解密操作。 - MD5摘要:在RSA签名前,通常会先对原始数据进行MD5摘要,增强安全性。 4. **错误处理...

    delphi字符串加密解密,我还有相同加密方法的php、C#、QT、golang、java版本

    加密算法有多种,如对称加密(如DES, AES)和非对称加密(如RSA, ECC)。 2. **Delphi中的加密**:Delphi是一个基于Pascal语言的集成开发环境,支持各种加密库,如CryptoAPI(Windows系统内置)、BCrypt或第三方库...

    C#字符串加密解密源码,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

    C#提供了System.Security.Cryptography命名空间,该命名空间包含了各种加密和解密算法,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。在这个项目中,可能使用了AES或者类似的对称加密算法,...

    Golang_GoCrypto是Smallstep产品使用的包的集合.zip

    2. **RSA(Rivest-Shamir-Adleman)**:RSA是一种非对称加密算法,用于公钥基础设施(PKI)和数字签名。`crypto/rsa`包提供了RSA算法的实现,可以用于加密、解密、签名和验证。 3. **SHA(Secure Hash Algorithm)*...

    go语言实践密码学.zip

    1. **RSA算法**:最著名的非对称加密算法,基于大数因子分解的难度。 2. **ECC(椭圆曲线加密)**:相对较新的加密技术,提供与RSA相当的安全性,但使用更短的密钥。 3. **密钥交换**:如Diffie-Hellman协议,使得...

Global site tag (gtag.js) - Google Analytics