栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中使用RSA密钥加密和解密纯文本?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中使用RSA密钥加密和解密纯文本?

请记住,RSA并非设计为分组密码。通常,RSA用于加密对称密钥,然后将其用于加密数据。考虑到这一点,下面是一个程序,该程序可以使用RSA私钥来加密可以自己解密的数据:

package mainimport (    "crypto/rand"    "crypto/rsa"    "crypto/sha1"    "crypto/x509"    "encoding/pem"    "flag"    "io/ioutil"    "log")// Command-line flagsvar (    keyFile = flag.String("key", "id_rsa", "Path to RSA private key")    inFile  = flag.String("in", "in.txt", "Path to input file")    outFile = flag.String("out", "out.txt", "Path to output file")    label   = flag.String("label", "", "Label to use (filename by default)")    decrypt = flag.Bool("decrypt", false, "Decrypt instead of encrypting"))func main() {    flag.Parse()    // Read the input file    in, err := ioutil.ReadFile(*inFile)    if err != nil {        log.Fatalf("input file: %s", err)    }    // Read the private key    pemData, err := ioutil.ReadFile(*keyFile)    if err != nil {        log.Fatalf("read key file: %s", err)    }    // Extract the PEM-enpred data block    block, _ := pem.Depre(pemData)    if block == nil {        log.Fatalf("bad key data: %s", "not PEM-enpred")    }    if got, want := block.Type, "RSA PRIVATE KEY"; got != want {        log.Fatalf("unknown key type %q, want %q", got, want)    }    // Depre the RSA private key    priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)    if err != nil {        log.Fatalf("bad private key: %s", err)    }    var out []byte    if *decrypt {        if *label == "" { *label = *outFile        }        // Decrypt the data        out, err = rsa.DecryptOAEP(sha1.New(), rand.Reader, priv, in, []byte(*label))        if err != nil { log.Fatalf("decrypt: %s", err)        }    } else {        if *label == "" { *label = *inFile        }        out, err = rsa.EncryptOAEP(sha1.New(), rand.Reader, &priv.PublicKey, in, []byte(*label))        if err != nil { log.Fatalf("encrypt: %s", err)        }    }    // Write data to output file    if err := ioutil.WriteFile(*outFile, out, 0600); err != nil {        log.Fatalf("write output: %s", err)    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号