![]() |
1
2
不对称算法就是为了这样的目的而发明的,这就是数字签名的工作方式。 但是,你的方法有一些问题。任何拥有接收者公钥的人都可以伪造签名。而且,签名根本不会改变!任何截获消息的人都可以假装是有效的发送者。非对称加密的目的是通过密钥交换来解决这些问题,这就是数字签名的概念,它基本上是一个非对称加密的散列消息,你正在到处乱扔。 http://en.wikipedia.org/wiki/RSA#Signing_messages 我会用图书馆的数字签名算法。第一个google搜索出现在Python上: |
![]() |
2
0
此方法的问题是,任何计算机都可以捕获guid和rsa加密的guid,并将它们相同地传递给其他计算机。您还没有真正创建任何只有接收客户端才能预测的唯一挑战/响应条件。你需要的是一个完全独特的东西,不能仅仅通过查看传递的参数来获得。可能是这样的:
在这种方法中,RSA加密将使用Client2的公钥来完成,这样只有Client2的私钥才能解锁它。使用ClientName,Client2可以从数据源检索预期的GUID,然后将返回的GUID与加密中的GUID匹配。我将时间戳的用法合并为salt,这样每次加密的字符串都会有不同的结果。使用时间戳作为盐的随机化被认为是非常弱的,但是它得到了重点。可以实现其他更安全/随机的算法。 |
![]() |
3
0
任何在客户端和服务器之间监视消息的人都可以伪造新消息
考虑切换到此消息模型:
不过,任何监视消息的人都可以重新发送以前发送的消息。 |
![]() |
4
0
公钥和私钥是解决问题的方法。我假设您不关心加密数据,但您关心的是数据是“授权的”。 假设你有三台电脑 比较2 比较3
Comp1将使用其私钥对邮件进行数字签名 Comp2将截获从Comp1到Comp3的消息,但不能在不使签名无效的情况下更改消息 Comp2将消息转发到Comp3 Comp3将使用Comp1的公钥来解密签名,并使用签名中的哈希来验证内容。
Comp1将使用其私钥对邮件进行数字签名 Comp1将生成一个随机加密密钥(通常是AES)并对消息进行加密。 Comp1将获取该加密密钥并使用Comp3的公钥对其进行加密 Comp2将截获该消息,但如果没有Comp3的私钥,则无法读取该消息
Comp3将使用它的私钥来解密AES密钥 Comp3将使用AES密钥解密整个消息 Comp3将通过使用Comp1的公钥解密签名来验证消息。 签名包含消息的哈希,如果哈希和消息的哈希匹配,则数据是完整的。 您可以将guid包含在有效负载中,作为一个查找来决定使用哪个公钥。
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 5 月前 |
![]() |
CactusCake · if语句中应有分号 6 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 7 月前 |