在客户端-服务器环境中使用 AES 加密

Posted

技术标签:

【中文标题】在客户端-服务器环境中使用 AES 加密【英文标题】:Using AES encryption in a client-server environment 【发布时间】:2016-10-26 01:27:15 【问题描述】:

我目前正在开发一个客户端-服务器应用程序。我有一些数据要在客户端加密并在服务器端解密。

我已经弄清楚了加密/解密部分并且可以正常工作。我的问题是密钥和盐。它们都是在运行时随机生成的,然后再通过网络发送到服务器。

我的问题是:

如果 Key 和 Salt 是随机的,如何让服务器解密数据??

我目前的解决方案是使用加密数据发送密钥和盐。

但这不会使我保护数据的努力付诸东流吗? 我应该在数据中“隐藏”密钥和盐吗? (附加在末尾/开头)

Client server AES encryption

该帖子上的人建议联系服务器,让他知道我们要发送安全消息。然后他生成一个密钥并将其发送回给您。对于一个你希望一切都尽可能打包的游戏网络来说,这不是有点“太多”吗?

平时都在做什么?

谢谢。

【问题讨论】:

是的;你的解决方案没用。您需要定义一个安全模型,以便您知道哪些秘密存在于何处、何地/如何进行身份验证。你需要阅读blogs.msdn.microsoft.com/ericlippert/2011/09/27/… 您可能需要非对称加密(然后您将遇到关于如何传输和验证公钥的一系列不同问题)。 【参考方案1】:

看起来您不小心绊倒并推出了自己的加密货币。哦哦。不过不用担心,只需振作起来,删除所有加密代码,然后使用SSLStream。

为什么?

    TLS 是多年工作、研究和分析的结果,这些人在加密方面比你我加起来要好得多,十亿倍

    这将比编写您自己的自定义解决方案更快、更轻松。如果您不使用 AES 的身份验证模式,则需要实现 Diffie-Hellman、RSA/DSA 签名、AES、一个或两个 HMAC 的组合,最重要的是,您需要注意填充预言,前向保密和一大堆其他东西。

除了玩笑,你永远不应该推出自己的加密货币。依靠久经考验的技术。

【讨论】:

我没有做自己的加密。我正在使用带有 HMACShA256 的 AES。我只是不确定如何安全地将我的密钥发送给客户。我真的很想了解这些东西是如何工作的。您在 RSA/DSA 和 Diffie-Hellman 中指出了几个解决方案。 @user1505230 不,解决方案是通过SSLStream 使用TLS。如果您自己滚动,您将使用 RSA/DH。

以上是关于在客户端-服务器环境中使用 AES 加密的主要内容,如果未能解决你的问题,请参考以下文章

Java 环境下使用 AES 加密的特殊问题处理

Javascript实现前端AES加密解密功能

AES加密算法在Linux下出现随机加密结果

使用 C# 与 PHP 的 AES GCM 加密

[转]AES加密遇到的问题

MySQL 中 AES_DECRYPT 加密,如何在瀚高数据库中使用