openssl_private_encrypt 加密数据
openssl_sign 签名
签名在什么场景下使用?作用是什么?
ssl的签名, 更多的是对来源的认证. 一般SSL的做法是, 服务器公开自己的公钥, 任何客户端都能拿到服务器的公钥证书. 我们的浏览器SSL客户端就是使用这个 对方主动发给你的证书 , 要求你用这个证书来做不对称加密来沟通你们的通讯加密密码的.
SSL的这种不对称加密, 理论上是只要有一对 公钥
和 私钥
证书, 就可以达到两个通讯节点的通讯内容不被窃听和篡改. 但是有一个条件, 就是这个公钥和私钥都是正确的, 没有被替换过的情况下才可以.
例如你现在要访问: https://sf.gg 这个网址, 你请求发出去了, 你收到了某个网络的返回的公钥
(我们假定你家的网线有可能被黑客拦截). 因为这个公钥是被主动塞过来的, 我们不知道是黑客塞的, 还是真的是 sf 的服务器塞的. 这个时候我们就需要通过签名来确认, 这个 公钥
证书是不是真的 sf 服务器发给你的.
大概的方法就是, 我们用我们系统自带的, 可信机构的根证书来检验这个 公钥
证书的签名是否有效. 一般签名信息是可信的根证书机构, 用他们的私钥来对证书主要内容计算后, 再用私钥来对计算值加密. 我们可以用系统对应的根证书公钥
来解开这个加密后的值, 并且本地对证书内容进行一样的主要内容计算, 匹配解密后的值和计算的值是否一致, 一致的话, 就可以认为这个 sf 的 公钥
的确是由某个我们系统信任的根证书机构签名认证的.
简单就是我们要知道网站的公钥
证书是否是真实可信的, 我们通过这样的关系连来确认:我们
<-信任-> 系统根证书机构
<-证明-> 网站证书
通过我们信任某个机构, 这个机构也为这个投递够来的证书做担保, 那么我们就可以认为证书是真的. 接下来就是用这个真的证书来做后续加密握手处理就可以了.
如果我们收到是一个黑客自己伪造的证书, 由于没有任何一个根证书机构为其证书做担保,
所以我们的系统就不会信任那个假的证书了. 但是由于所有的可信性都是通过系统根证书来保证的, 假如黑客能够成功的在你的系统上安装一个他自己的根证书, 并让我们系统信任那个证书, 那么黑客就可以利用那个证书, 来自行对所有网站域名来签发任何证书, 而我们系统无法察觉到这个威胁.
SSL最复杂的就是这种信任授权等逻辑, 至于数据的加密解密倒是一个纯粹的理论问题, 涉及的一个无限大的公因数的互为加密和解密的算法问题.
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答719 阅读✓ 已解决
2 回答2.3k 阅读
1 回答687 阅读✓ 已解决
配合一个 key 防止串改。
单纯验证数据。(但是不需要知道原数据)
核心是散列算法,即你可以从 A 得到一个 B ,但是几乎不可能从 B 逆向得到 A 。
比如 "hello" 的 MD5 值是:5d41402abc4b2a76b9719d911017c592 。
再比如我给你一个 MD5 值 a2891da3bb01b6b8406521b844ba1a20 ,这是 B ,你几乎不可能算出它是哪个字符中的 MD5 值。