在开发应用的过程中,难免会遇到隐私数据的传输,如账号密码、支付密码等。以明文的方式传输这些信息,会有泄露给别人的风险。
http都是以明文传输,数据都是未经加密的。https的数据传输过程是加密的,传输过程中即使被别人截取,也不会造成很大的影响。对于安全性而言,上https能够解决大部分问题,但发送请求时在浏览器控制台中,依然能看到详细的请求数据:
如果不希望控制台中能够看到请求数据信息,那么必须在发送请求之前将数据进行加密:
实现方法
前置准备:
- 一对匹配的公钥私钥
- jsencrypt(rsa加密库)
前端部分实现:
// 公钥 const publicKey = `-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCh5Nk2GLiyQFMIU+h3OEA4UeFbu3dCH5sjd/sLTxxvwjXq7JLqJbt2rCIdzpAXOi4jL+FRGQnHaxUlHUBZsojnCcHvhrz2knV6rXNogt0emL7f7ZMRo8IsQGV8mlKIC9xLnlOQQdRNUssmrROrCG99wpTRRNZjOmLvkcoXdeuaCQIDAQAB-----END PUBLIC KEY-----` // 创建实例并设置公钥 const encryptor = new JSEncrypt() encryptor.setPublicKey(publicKey) // 设置请求数据 const data = { email: '[email protected]', password: 'testpwd' } // 加密请求数据 const encrypted = encryptor.encrypt( JSON.stringify(data) ) // 打印服务器解密结果 const http = new XMLHttpRequest() http.open('post', './server.php') http.responseType = 'json' http.send(encrypted) http.onload = () => { console.log(http.response) }
后端部分实现:
<?php // 私钥 $private_key = '-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQCh5Nk2GLiyQFMIU+h3OEA4UeFbu3dCH5sjd/sLTxxvwjXq7JLq Jbt2rCIdzpAXOi4jL+FRGQnHaxUlHUBZsojnCcHvhrz2knV6rXNogt0emL7f7ZMR o8IsQGV8mlKIC9xLnlOQQdRNUssmrROrCG99wpTRRNZjOmLvkcoXdeuaCQIDAQAB AoGAUTcJ1H6QYTOts9bMHsrERLymzir8R9qtLBzrfp/gRxxpigHGLdph8cWmk8dl N5HDRXmmkdV6t2S7xdOnzZen31lcWe0bIzg0SrFiUEOtg3Lwxzw2Pz0dKwg4ZUoo GKpcIU6kEpbC2UkjBV4+2E6P1DXuhdgTyHoUA3ycxOdjCAUCQQCyjTzGPXFoHq5T miJyVd4VXNyCXGU0ZuQayt6nPN8Gd5CcEb2S4kggzPXQcd90FO0kHfZV6+PGTrc2 ZUuz5uwPAkEA6B3lmEmiZsJS/decLzWR0T1CXaFGwTjBQbHXJ0RziAfkuy+VwSmh vrW/ipk5xbREr5rKx3jVI2PzVOvLw7NgZwJAbUsvDFnH9WfyZZJPy5TsID97awCL oovozM2phM0p55eAmUfyttp0ND/BqBpMIY49qoH8q5N9FYJRe6Z9tF2B2QJAQBEo cw039xcB4zCk2l713YQEEmXWarSomuJkWWFKZiyPlJ8Ava0pCMOPl8jNKmWkY7fc 6ovOgJMw8aqXtm+HVwJAerJeUEDez2djG5pIF6aCV0bP3fhQUq8OQCgGF5Qzo9Cn qvYreGpYKPJGVixAsEPCiLzJRhy1XfFona6VRXIIxw== -----END RSA PRIVATE KEY-----'; // 加密后的请求数据 $request = file_get_contents('php://input'); // jsencrypt会默认将加密后的数据转为base64字符串 $encrypted = base64_decode($request); // 解密密文并返回给前端 openssl_private_decrypt($encrypted, $decrypted, $private_key); echo $decrypted;
实现效果:
(成功水过一个月…
今天,我已经上网冲浪了七个多小时,但从未找到像您这样有趣的文章。对我来说,这足够值得。就个人而言,如果所有站点所有者和博客作者都像您一样做得很好,那么互联网将比遗忘任何时候都更加有用。
嗨,亲爱的Chutz,十分感谢你的评论,希望你能在这里发现有用的资料。