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) }
相关推荐
本工具是用于golang编写的,用于rsa非对称加密技术实现的对字符串的加密解密工具,可以对文件进行加密解密(txt、docx、xls文档等)。对文档加密会对文档同目录下生成一个后缀名加.hh的文档。 操作说明: 一、对字符...
RSA加解密demo go语言版本,代码简洁,可直接使用,适合用来做非对称加解密应用。也适合用来做算法研究使用。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·...
java,php,GOLang,JavaScript,多端代码,使用AES ECB 128加密解密内容互通,可以使用任意一种语言加密,使用另一种语言解密
golang本身不自带ECB加密的方法,有人写了ECB加密的方法请求合并,但被go的开发团队拒绝了,原因貌似是当时谷歌的go团队急着推送golang1.1版本。 我贴上原代码内容,有需要的朋友把下面两个文件放到go的`src/pkg/...
1、代码详细,实例操作 2、可以运行成功
安全总是很重要的,各个语言对于通用的加密算法都会有实现。本文先是对RSA算法进行了简单介绍,后才进行介绍如何用Go实现RSA的加密解密,下面一起来看看吧。
Golang对称加密库
ket Paket-使用golang打包和加密文件的文件库! Godoc:CMD工具| pengine(paket引擎)主存储库:github.com/SeanTolstoyevsk:key:Paket-可以在golang中打包和加密文件的库! Godoc:CMD工具| pengine(paket引擎)...
Golang常见加密解密算法源码.zip
关键:(1)Java支持NoPadding填充方式,并且已经封装好相应的接口,可通过Cipher.getInstance来指定RSA/ECB/NoPadding该对齐和填充方式; (2)Golang中不支持NoPadding的填充方式,需要自己处理;
4.license文件最外层使用RSA加解密算法,内置自定义加解密算法作为二层加密。 5.文件包含: a.对接服务动态库 b.获取服务器机器码 c.软件license对接文档.pdf d.生成license授权工具 e.生成RSA公钥和私钥文件 f.Demo...
RC4加解密 用java实现
国密加密解密 sm4 sm2 的java python golang实现,java和python,golang的有一定区别,需要修改点东西才可以实现。 SM4Key = ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) ...
这是国密SM3算法的Golang实现,其中包括了测试,和一些Debug信息。
Golang CTF加解密工具---------------------------------------------------------- ____ _ _ __ _ _| __ ) _ _ | | _ _ ___(_)/ _ | ___ _ __/ / || _ \| | | | | | | | | | / __ | | | _ / _ \ ' __| | || |_) | |...
Meow 哈希的Golang实现,非常快速的非加密哈希
golang中文手册.chm,学习golang语言的字典,一典在手,天下我有
微信开放平台加解密库 (Golang) Usage $ go get github.com/heroicyang/wechat-crypter import "github.com/heroicyang/wechat-crypter" token := "RMNlACHlV5ThzfRlVS4D4" corpID := "wx5823bf96d3bd56c7" ...
直接写的小程序,批量加密、解密任意文件类型文件。需电脑安装.net4.0以上版本。可提供源码。