flutter - Dart / Flutter 使用公钥解密
问题描述
我在我的服务器上创建了一个 RSA 密钥对,只有服务器拥有私钥。客户端(颤振应用程序)将有权访问公钥。因此,当服务器接收到加密消息时,它会知道该消息来自正确的客户端,并将使用其私钥解密通过公钥加密的消息。
当服务器(php 7.3)向客户端发送回复时,我想通过服务器端的私钥加密消息,以便客户端可以使用公钥解密消息。
非对称加密有其自身的限制,例如最大字符长度。但是发送和接收小消息会很好。
Flutter 包 encrypt & pointycastle 似乎不支持使用公钥解密。我不希望客户同时拥有这两个密钥。
可能我将不得不使用对称加密。但是,如果您能提出解决方案,我将不胜感激。
注意:我已经能够通过 pointycastle 使用公钥加密消息,但是编写一个使用公钥解密数据的函数对我来说非常复杂。
解决方案
我在我的服务器上创建了一个 RSA 密钥对,只有服务器拥有私钥。客户端(颤振应用程序)将有权访问公钥。因此,当服务器接收到加密消息时,它会知道该消息来自正确的客户端,并将使用其私钥解密通过公钥加密的消息。
通常我们会尝试不对公钥设置任何安全性。如果您想验证您的消息,您应该使用客户端特定的密钥对并使用它们生成签名。
此外,通常您不仅要对消息保密,还要确保它们没有被篡改(消息真实性带来的完整性)。
当服务器(php 7.3)向客户端发送回复时,我想通过服务器端的私钥加密消息,以便客户端可以使用公钥解密消息。
您可以使用属于客户端密钥对的公钥来执行此操作。
非对称加密有其自身的限制,例如最大字符长度。但是发送和接收小消息会很好。
最大位或更确切地说是字节大小,而不是字符长度。但通常我们还是会使用混合加密。
Flutter 包 encrypt & pointycastle 似乎不支持使用公钥解密。我不希望客户同时拥有这两个密钥。
这很好,因为使用公钥解密没有意义,您将使用单独的密钥对。
可能我将不得不使用对称加密。但是,如果您能提出解决方案,我将不胜感激。
最好只使用 TLS,并将 TLS 与客户端身份验证一起使用以实现简单的传输安全。
如果您需要应用程序级别的安全性,那么您可以使用容器格式,例如 CMS。最好每个实体使用两个密钥对:一个用于加密(针对私钥持有者),另一个用于由私钥持有者生成签名(即消息完整性和真实性)。
注意:我已经能够通过 pointycastle 使用公钥加密消息,但是编写一个使用公钥解密数据的函数对我来说非常复杂。
好的。不。
推荐阅读
- php - 如何在 select count(...) 中使用表达式?(教义)
- python - Python + Selenium JS 下拉选择
- django - 是否可以禁止公共访问 AWS 文件,但只提供特定的来源?
- c - 如何使用C中的函数动态初始化数组
- wordpress - wordpress:插件更新不更新
- scala - Spary JSON 数据类型的通用函数,引发类型不匹配错误
- batch-file - 根据文件中的某些字符串截断块
- android - 将联系人 android 与远程数据库同步
- python - 检查索引文件中是否存在 MD5 值
- npm - 在同一个 package.json 中有两个版本的引导程序