我想生成rsa密钥对(公共和私有),然后将它们用于AES加密和解密。例如,用于加密的公共密钥和用于解密的私有密钥。我为此编写了一个简单的代码,但是问题是当我运行时这段代码我得到这个错误:
crypto/aes: invalid key size 1639
我该如何解决这个问题?我的加密代码如下:
//genrarting private key privateKey, err := rsa.GenerateKey(rand.Reader, 2014) if err != nil { return } privateKeyDer := x509.MarshalPKCS1PrivateKey(privateKey) privateKeyBlock := pem.Block{ Type: "RSA PRIVATE KEY", Headers: nil, Bytes: privateKeyDer, } privateKeyPem := string(pem.EncodeToMemory(&privateKeyBlock)) //using privateKeyPem for encryption text := []byte("My name is Astaxie") ciphertext, err := encrypt(text, []byte(privateKeyPem)) if err != nil { // TODO: Properly handle error log.Fatal(err) } fmt.Printf("%s => %x\n", text, ciphertext) //Definition of encrypt() func encrypt(plaintext []byte, key []byte) ([]byte, error) { c, err := aes.NewCipher(key) if err != nil { return nil, err } gcm, err := cipher.NewGCM(c) if err != nil { return nil, err } nonce := make([]byte, gcm.NonceSize()) if _, err = io.ReadFull(rand.Reader, nonce); err != nil { return nil, err } return gcm.Seal(nonce, nonce, plaintext, nil), nil }
如评论中所建议,我搜索了“混合密码术”。这个例子解决了我的问题。