在开发应用的过程中,难免会遇到隐私数据的传输,如账号密码、支付密码等。以明文的方式传输这些信息,会有泄露给别人的风险。
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,十分感谢你的评论,希望你能在这里发现有用的资料。