Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端/服务器密码加密 我在C++中构建了客户机/服务器应用程序,需要每个客户提供密码。显然,我希望这是安全的运输过程中,所以我一直在寻找一种加密密码的方法;这样,只有服务器应用程序才能再次对其进行解密_C++_Encryption_Cryptography_Client Server_Public Key - Fatal编程技术网

客户端/服务器密码加密 我在C++中构建了客户机/服务器应用程序,需要每个客户提供密码。显然,我希望这是安全的运输过程中,所以我一直在寻找一种加密密码的方法;这样,只有服务器应用程序才能再次对其进行解密

客户端/服务器密码加密 我在C++中构建了客户机/服务器应用程序,需要每个客户提供密码。显然,我希望这是安全的运输过程中,所以我一直在寻找一种加密密码的方法;这样,只有服务器应用程序才能再次对其进行解密,c++,encryption,cryptography,client-server,public-key,C++,Encryption,Cryptography,Client Server,Public Key,我遇到的问题不一定是让函数工作,而是理解我需要做什么才能将其关联到代码中。我试图理解并阅读了MSDN(感觉是这样的),但我仍然在学习,所以我真的需要一些关于我的实现的清晰和准确的指导 这听起来对吗? 我在服务器和客户机上获取CSP的上下文 我在服务器上生成一个密钥,或者加载一个(无论什么) 然后我 从服务器导出公钥并将其发送到客户端,客户端导入密钥,然后加密密码并返回,这样只有服务器才能再次解密。 (尝试时失败) 或者,我会吗 导出会话密钥或使用交换密钥对加密的交换密钥对(单个公共密钥) 哦,我

我遇到的问题不一定是让函数工作,而是理解我需要做什么才能将其关联到代码中。我试图理解并阅读了MSDN(感觉是这样的),但我仍然在学习,所以我真的需要一些关于我的实现的清晰和准确的指导

这听起来对吗?

  • 我在服务器和客户机上获取CSP的上下文
  • 我在服务器上生成一个密钥,或者加载一个(无论什么)
  • 然后我

    从服务器导出公钥并将其发送到客户端,客户端导入密钥,然后加密密码并返回,这样只有服务器才能再次解密。 (尝试时失败)

    或者,我会吗

    导出会话密钥或使用交换密钥对加密的交换密钥对(单个公共密钥)

    哦,我太迷茫了,我甚至无法解释清楚


    请帮助我理解这一点…

    这实际上取决于您希望基于哪种身份验证解决方案。选择多种多样

    例如,您可以依赖底层操作系统身份验证。您根本不需要管理密码。但这需要与运行应用程序的域进行更紧密的集成


    另一种选择是使用HTTPS和简单身份验证。它基本上使用SSL加密通信,然后发送用户名/密码对。非常简单,所有web服务器都支持。如果你不想依赖现有的Web服务器,比如IIS安装,你可以很容易地找到C++代码来处理这个问题(搜索StAcExt溢出用于这个问题)。

    < P>如果你不需要加密的通信,比如数据传输,你可以使用密码验证。密码不需要通过网络传输,也不存在第三方仅重新发送某些数据包的重播攻击风险。从不利的方面来看,中间人(MITM)攻击是可能的。 如果您需要MITM保护或其他通信需要加密通道,则应使用带有证书的TLS或带有两个密钥对的公钥加密。

    请勿执行任何操作。 这是非常重要的。请勿自行实施此操作。
    重复一遍,不要做任何事,你会出错的

    您应该使用已经可用的。只需打开到SSL套接字的连接,流的内容就会在另一端自动加密和解密


    应用程序只需获取用户名/密码元组并验证它们是否正确。不要尝试实现加密部分。

    您好,Marten,谢谢您的回复,但我担心在这种情况下仍然存在安全问题,因为密码在到达服务器时会被解密为明文。这也意味着将明文密码存储在DB???您建议使用什么形式的端点加密或哈希来防止这种情况。我在大学时做过RSA,了解算法,但我不了解的只是这个特定客户机/服务器设置中密钥的顺序。谢谢将pwd作为纯文本存储在db中的问题与您关于加密传输层的问题无关。实际上,在db中存储一个经过哈希和盐析的pwd版本。不要以任何其他方式记录或存储明文密码。但是,同样,这与https无关。Client:(Passowrd明文)->SSL->Server(再次明文)->hash(salt的单向)->DB。就个人而言,我不会在客户机上实现哈希,因为这会将您锁定在单一的哈希技术中(升级客户机非常困难(或者开发一个包含哈希版本控制并准备好支持永久旧版本的方案))。您好,Stephan,谢谢您的回复,因此我通常会获得CSP上下文,创建服务器密钥,然后将公钥发送给客户端,这样应用程序就可以加密并发回(或者是否定的——我相信这就是我学到的),或者更复杂。我有大部分代码,可以在服务器上加密和解密,但不确定要将哪些密钥发送给客户端。我可以选择导出会话密钥、交换密钥,或者只导出公钥?我的答案集中在质询响应部分,现在我发现第二部分有点不清楚,对不起。服务器的公钥应该已经存储在客户端中,然后可以在连接期间使用它向服务器传输随机会话密钥。我知道你可以使用客户端私钥来防止重播攻击等,但我不知道如何使用,我会转向TLS或其他方式:/谢谢Stephan,很抱歉继续推进这一点(我无法控制自己,因为有东西告诉我我就快到了!)你能解释一下你看到的过程吗,因为我想那可能是我绊倒的地方。我可以在服务器-(S)和客户端(C)上获取csp的内容,并且我可以从(S)导出任何密钥,公共、私有、交换等。问题是当我通过RPC将其发送到客户端时,无论我使用哪个密钥(C)都会抛出NTE错误。-->还有下一条评论!我已经检查了CSP,并且在客户端和服务器上都是相同的!已经通过网络对两台机器进行了测试,并且两个应用程序都在同一台机器上,但仍然存在完全相同的错误?正常过程是什么?为什么我要将(C)的会话密钥发送到(s)?这对我来说是新的吗?当我认为我想将公钥从(S)发送到(C)以便(C)加密消息并发送回(S)时。(S) 具有私钥,因此可以解锁(C)使用其公钥加密的任何内容。我