目前我在涉及人民币网上交易时候的方式是使用 RSA 加密 ...
假设我们现在有两台服务器分别叫子和丑 ... 子准备找丑完成一个操作 ...
则子用丑的公钥加密需要传送的敏感字符串并用自己的私钥签名 ...
之后计算加密后数据的 MD5 放在密文的前面一起发给丑 ...
丑收到之后将收到内容的前 16 字节分拆出来验证后面数据的完整性 ...
如果完整则使用子的公钥验证签名并使用自己的私钥解密数据 ...
不完整则通过另一个协议告知子重发数据 ... 如果解密失败记录 log 并丢弃这个请求 ...
这是效率和安全性同时有保证的办法 ...
如果要最高的安全性可以在 RSA 之前再加一次获得单次令牌的步骤 ...
缺点就是增加交互的次数 ...
如果不需要这么高的安全性也可以用摘要算法来为每一次请求做指纹 ...
计算会快很多 ...
但这些都是在协议层级的控制 ... 保证在通信过程中就算被第三方抓包也无法伪造数据 ...
但如果客户端遭完整破解 ... 密钥和协议泄漏 ...
然后伪造的客户端使用同样的协议向服务端发送数据的话 ...
在我的知识范围内我想不到任何可以区分正常客户端和伪造客户端的办法 ...
就只能人工检查服务端 log 然后禁止那个客户端连接并回滚所有变更了 ...