Javascript到PHP加密通讯的简单实现方法
来源:才华咖 本文已影响2.71W人
来源:才华咖 本文已影响2.71W人
PHP是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用。今天,小编为大家搜索整理了Javascript到PHP加密通讯的简单实现,希望大家能有所收获,更多精彩内容请持续关注我们考试网!
互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的`访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到。对安全性要求较高的网站,比如银行和大型企业等都会使用HTTPS对通讯过程进行加密等处理。
但是使用HTTPS的代价是及其昂贵的。不只是CA证书的购买,更重要的是严重的性能瓶颈,解决方法目前只能采用专门的SSL硬件加速设备如F5的BIGIP等。因此一些网站选择了简单模拟SSL的做法,使用RSA和AES来对传输数据进行加密。原理如下图所示:
这样就在一定程度上提高了数据传输的安全性。但是对于大多数网站来说,大部分数据往往没必要搞这么严密,可以选择性地只针对某些重要的小数据进行加密,例如密码。对于小数据量加密来说,可以没必要使用整个流程,只使用RSA即可,这样将大大简化流程。
为什么是小数据量?因为相对于对称加密来说,非对称加密算法随着数据量的增加,加密过程将变的巨慢无比。所以实际数据加密一般都会选用对称加密算法。因此PHP中的openssl扩展公私钥加密函数也只支持小数据(加密时117字节,解密时128字节)。
网上已有一些AES、RSA的开源Javascript算法库,在PHP中更可直接通过相关扩展来实现(AES算法可以通过mcrypt的相关函数来实现,RSA则可通过openssl的相关函数实现),而不用像网上说的用纯PHP代码实现算法。由于篇幅所限,本文只介绍Javascript和PHP的RSA加密通讯实现,拿密码加密为例。
先上代码:
前端加密
首先加载三个RSA的js库文件,可到这里下载
view plaincopy to clipboardprint?
$(document)y(function(){
//十六进制公钥
var rsa_n = "C34E069415AC02FC4EA5F45779B7568506713E9210789D527BB89EE462662A1D0E94285E1A764F111D553ADD7C65673161E69298A8BE2212DF8016787E2F4859CD599516880D79EE5130FC5F8B7F69476938557CD3B8A79A612F1DDACCADAA5B6953ECC4716091E7C5E9F045B28004D33548EC89ED5C6B2C64D6C3697C5B9DD3";
$("#submit")k(function(){
setMaxDigits(131); //131 => n的十六进制位数/2+3
var key = new RSAKeyPair("10001", , rsa_n); //10001 => e的十六进制
var password = $("#password")();
password = encryptedString(key, password);//美中不足,不支持汉字~
$("#password")(password);
$("#login")it();
});
});
PHP加密函数
view plaincopy to clipboardprint?
/**
* 公钥加密
*
* @param string 明文
* @param string 证书文件()
* @return string 密文(base64编码)
*/
function publickey_encodeing($sourcestr, $fileName)
{
$key_content = file_get_contents($fileName);
$pubkeyid = openssl_get_publickey($key_content);
if (openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid))
{
return base64_encode("" . $crypttext);
}
return False;
}
PHP解密函数
view plaincopy to clipboardprint?
/**
* 私钥解密
*
* @param string 密文(base64编码)
* @param string 密钥文件()
* @param string 密文
用 Javascript 实现锚点(Anchor)间平滑跳转
两种实现表单验证的javascript方法
有关JavaScript中的prototype.bind()方法介绍
javascript中的match函数用法简介
JavaScript中push(),join() 函数实例详解
php动态生成JavaScript代码
Javascript的this用法简述
JavaScript简单实现放大镜效果代码
堆的javascript实现方法
关于JavaScript中的parse()的使用方法
关于javascript中apply()和call()方法的区别
关于异步JavaScript编程中的Promise使用方法
详解JavaScript中的splice()使用方法
java使用ConcurrentHashMap和计数器实现锁的方法
使用JavaScript实现Java的List功能
java环境变量path和classpath的配置过程
通讯地址具体填写方法
JavaScript中的原型链prototype详解
用javascript实现图片模糊到清晰载效果指南
Python和JavaScript语言转换的常用工具
Javascript中typeof 用法归纳
JavaScript类定义原型方法的两种实现的区别
javascript的方法
Javascript实例教程如何使用HoTMetal
Javascript中call与apply的学习笔记示例
关于JavaScript中isPrototypeOf函数作用和使用实例
Javascript简单实现面向对象编程继承实例代码
简讯的写作方法
关于JavaScript中call()和apply() 的一些理解
JavaScript中this的用法步骤
如何使用javascript实现瀑布流及效果加载
javascript中String对象的slice()方法
通讯的写法
JavaScript和JSP的区别
javascript字符串对象常用api函数小结
Javascript到PHP加密通讯的简单实现方法
javasc ript 返回上一页及刷新页面的实现方法
JavaScript-JavaScript数据结构和算法之图和图算法,
30行代码实现Javascript中的MVC
java parseInt解释加方法