我正在尝试在基于Ruby Sinatra的Web后端和Google Go应用程序之间建立安全的通信。Go应用程序包含公用密钥,并最初打开连接。然后,它使用其公钥加密随机生成的AES,并将其发送到Web后端。所有即将到来的(大型)数据将使用AES密钥进行加密。通常这是一种可用的方法吗?
Go代码如下所示
aesRand := make([]byte, 32)
rand.Read(aesRand)
AESBlock, _ = aes.NewCipher(aesRand)
// Encrypt AES key with RSA
data, err := rsa.EncryptPKCS1v15(rand.Reader, PubKey, aesRand)
现在的问题是,通过行加密并发送随机字节是否正确,还是应该加密并发送AESBlock?
提前致谢!
您应该aesRand
使用RSA 进行加密并发送(否则称为密钥)。
您还需要根据所使用的加密模式传递IV 。
len(KEY)+ len(IV)必须小于len(PubKey),前提是您要在初始RSA事务中同时对它们进行加密。
请仔细阅读rsa模块的文档,以注意每种模式的弱点。您应该使用DecryptPKCS1v15SessionKey解密以上内容。请注意有关在新协议中使用RSA-OAEP的注释。
如果您将其作为学习经验来做,那很好,但是如果代码是为了保护信息,如果这些信息受到破坏,它将花费大量金钱,那么我将使用TLS,它将在经过充分测试的框架中完成上述所有工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句