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年由罗纳德·...
RSA加密算法是一种非对称加密算法,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家在1977年共同提出。该算法的名字正是取自这三位发明者姓氏的首字母...
本项目"Go-go语言封装的各种对称加密和非对称加密"正是针对这一需求,提供了便捷的Go语言实现,包括3重DES、AES的CBC和CTR模式以及RSA非对称加密。下面将详细介绍这些加密算法及其在Go中的应用。 1. 对称加密: - ...
2. **非对称加密**:非对称加密如RSA、ECC(Elliptic Curve Cryptography)使用一对公钥和私钥,公钥用于加密,私钥用于解密。这种方式更安全,但计算复杂度较高。了解Go中如何实现这些算法,对于理解公钥基础设施...
非对称加密则使用一对公钥和私钥,如RSA、ECC等。在本例中,由于没有具体提及使用的加密算法,我们可以假设它可能使用了常见的对称加密方式,因为这种方式在处理大量数据时效率更高。 解密则是加密的逆过程,通过...
4. **PKCS#8**:这是一个用于非对称密钥的通用加密标准,不仅支持RSA,还支持其他算法如ECDSA。它定义了私钥的封装方式,可以是PEM或DER编码。 在Golang中,我们可以使用内置的`crypto/x509`包来处理这些任务。以下...
2. **RSA加密**:RSA是一种非对称加密算法,通常用于密钥交换和数字签名。`crypto/rsa`包提供了RSA的实现。RSA的关键在于一对公钥和私钥,公钥用于加密,私钥用于解密。以下是一个简单的RSA加密示例: ```go import...
另一方面,非对称加密(如RSA)使用一对公钥和私钥,公钥用于加密,私钥用于解密,解决了密钥分发的问题,但计算效率相对较低。 对于跨语言通信,一致性是关键。无论使用哪种语言,加密解密的实现必须遵循相同的...
与传统的RSA等非对称加密算法相比,ECC在安全性相当的情况下,具有密钥更短、计算效率更高的优势,因此在资源有限的设备如移动设备和物联网设备中被广泛采用。 **椭圆曲线理论基础** 椭圆曲线是由方程y^2 = x^3 + ...
RSA则是一种非对称加密算法,它使用一对公钥和私钥进行加解密。公钥可以公开,私钥必须保密。在PHP中,`openssl_pkey_new`用于生成密钥对,`openssl_public_encrypt`和`openssl_private_decrypt`用于加解密。 接...
2. **非对称加密**:使用一对公钥和私钥,公钥用于加密,私钥用于解密,如RSA、DSA(Digital Signature Algorithm)。非对称加密安全性高,但相对对称加密速度慢,适用于证书认证、数字签名等场景。 在Java中,我们...
创建公钥和私钥,进行加解密操作,这里略过具体代码,因为涉及到的步骤相对复杂,包括生成密钥对、公钥的PEM编码和解码等。 在设计加密器时,还需要考虑其他因素,比如错误处理、密钥管理、安全编码实践(如避免SQL...
这段代码展示了如何使用 RSA 非对称加密算法进行解密。首先,从文件中读取私钥,然后解析 PEM 编码的私钥。接着,使用 `rsa.DecryptPKCS1v15` 函数来解密之前加密的数据。 #### 结论 Go 语言的 `crypto` 包为开发者...
**RSA**(Rivest-Shamir-Adleman)是一种非对称加密算法,由两个密钥组成:公钥和私钥。公钥用于加密数据,而私钥用于解密。在这个场景中,私钥用于对数据的哈希值进行签名,以验证数据的完整性和来源。 **SHA256**...
- RSA非对称加密:商户私钥用于签名,支付宝公钥用于验证。Golang中的`crypto/rsa`和`crypto/x509`包处理加密和解密操作。 - MD5摘要:在RSA签名前,通常会先对原始数据进行MD5摘要,增强安全性。 4. **错误处理...
加密算法有多种,如对称加密(如DES, AES)和非对称加密(如RSA, ECC)。 2. **Delphi中的加密**:Delphi是一个基于Pascal语言的集成开发环境,支持各种加密库,如CryptoAPI(Windows系统内置)、BCrypt或第三方库...
C#提供了System.Security.Cryptography命名空间,该命名空间包含了各种加密和解密算法,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。在这个项目中,可能使用了AES或者类似的对称加密算法,...
2. **RSA(Rivest-Shamir-Adleman)**:RSA是一种非对称加密算法,用于公钥基础设施(PKI)和数字签名。`crypto/rsa`包提供了RSA算法的实现,可以用于加密、解密、签名和验证。 3. **SHA(Secure Hash Algorithm)*...
1. **RSA算法**:最著名的非对称加密算法,基于大数因子分解的难度。 2. **ECC(椭圆曲线加密)**:相对较新的加密技术,提供与RSA相当的安全性,但使用更短的密钥。 3. **密钥交换**:如Diffie-Hellman协议,使得...