热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

淘宝RSA分析与学习

淘宝,购物者的天堂。每天更有数以万计的用户登陆购买商品,其背后的技术支持,能让我们愉快的购物。而前段时间吵得很火的,数据包劫持能够分析到你的各种行为,其中不乏网站账号密码。而为什么他们
淘宝,购物者的天堂。每天更有数以万计的用户登陆购买商品,其背后的技术支持,能让我们愉快的购物。
而前段时间吵得很火的,数据包劫持能够分析到你的各种行为,其中不乏网站账号密码。而为什么他们没有劫持到淘宝的账号密码呢,总是拿别的小软件开涮呢?原因很简单,淘宝的密码在页面传输之前就进行了rsa加密(一种非对称的算法),传输的时候已经变为了已加密的密码了,就算你截取后,没有私有密钥也是解不开的,而且每次rsa加密后都会得到的不同密文,so,这既是为什么没人调戏淘宝的原因。
讲了这么多,先讲讲我是怎么找到加密算法那段代码的吧,适用于新手。

一、寻找rsa加密模块

  1. 用火狐浏览器,然后加firebug插件

    选择firebug

  2. 选择属性改变时暂停

password2下断点
此时的password2也就是加密后密文

  1. 正常登录
    输入账号密码后提交,此时浏览器会暂停起来。
    找到密码更改处
    一直F11,直接看到右边视图,然后点击右边第一行,再到左边点击箭头所选位置(JS格式化)。
    再点F11, 就调到了RSA加密模块了。
    在进入加密模块前,可以看到加密模块的调用信息:
 encrypt: function (a) {// a为你输入的密码
return a && this.pbk //pbk是页面上传入的密钥,图2上面的pbk
&& this.exponent ? (this.rsa || (this.rsa = new e, this.rsa.setPublic(this.pbk, this.exponent)), a = this.rsa.encrypt(a)) : a
}//exponent是10001,如果不清楚都可以采用直接在console里面输入的方式得到。
//全文的意思是,判断a,pbk,exponent 是否为空,若不为空,则首先设置公钥,然后再对a进行加密,最后返回加密后的a

OK,我们分析完他的调用方法后,再看它的加密具体实现
地址在这里https://g.alicdn.com/kg/??rsa/2.0.1/index-min.js?t=1358514278.js

二、分析加密算法

打开我们找到的rsa加密模块地址,每一段开头都有这样一段代码

KISSY.add('kg/rsa/2.0.1/index', [
'./jsbn',
'./rng'
]

其实不然,通过对kissy(淘宝js框架)的简单了解,大概意思应该是在kissy中添加一个模块,这个模块的地址为“kg/rsa/2.0.1/index”,其中会用到另外2个模块 ‘./jsbn’, ‘./rng’。
插一句题外话,kissy框架,提出模块化的概念,所以很多的方法都包装到模块里面了,在你使用的时候,你只需要因为对应的模块即可。有种插件式开发的感觉,对于经常写程序开发的人来讲,比较熟悉也很容易接受。
这一步分析透彻后,我们需要做的是,去kissy模块化,这样才能把这个加密算法搬到你自己的论坛呀、站点呀这些地方。

//我们把类似于这样的结构
KISSY.add('kg/rsa/2.0.1/index', [
'./jsbn',
'./rng'
],function (S, require, exports, module){
//改为
var index=function() {=

全文有4个模块需要改动。
我们再把引入的模块修改一下

//修改1
var d = require('./jsbn'),
f = require('./rng');
//改为
var d = new jsbn();
f = new rng();
//修改2
module.exports = i;
//改为
return i;

修改完后就可以写调用方法了

//str为加密的参数,pbk为公钥,exponent为公钥指数
function encrypt(str){
var temp=new index();
temp.prototype.setPublic(this.pbk,this.exponent);
return temp.prototype.encrypt(str);
}

贴上我修改后的rsa地址,方便各位学习
http://download.csdn.net/detail/u014577133/9575570

写在最后,rsa算法其实网上到处都有一大片,包括java版,.net版等等。我这里只是分享下我的心得体会,顺便熟悉下浏览器的调试模式,下断点的方式。
我的疑问:
淘宝的C端采用rsa对密码进行加密,那么服务器端肯定有私钥来进行解密。这个过程中我的密码是”123”,加密后传输到服务器,解密后密码为”123”,然后和数据库里面我的密码进行比对。那是不是数据库里面我的密码存储的就是明码”123”呢?如果真有一天淘宝数据库泄密,成万上亿的用户密码被泄露,这个损失肯定相当严重!
不过有可能服务器端又进行二次加密,比如md5加密,然后再和数据库中已经进行了md5加密的密码进行比较,这样就算泄露,也不会让普通人随随便便就登录。能起到一定的作用。那服务器如果还要进行md5加密的话,那每天那么多的并发量,服务器还要进行二次加密是不是就增加了服务器的负担,那又为何不直接在客户端进行加密后再传输呢?答案不得而知,我猜测也许是为了兼容部分老系统吧,所以才到服务端进行二次加密。


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 利用 JavaScript 和 Node.js 验证时间的有效性
    本文探讨了如何使用 JavaScript 和 Node.js 验证时间的有效性。通过编写一个 `isTime` 函数,我们可以确保输入的时间格式正确且有效。该函数利用正则表达式匹配时间字符串,检查其是否符合常见的日期时间格式,如 `YYYY-MM-DD` 或 `HH:MM:SS`。此外,我们还介绍了如何处理不同时间格式的转换和验证,以提高代码的健壮性和可靠性。 ... [详细]
  • 深入解析JavaScript柯里化的实现机制及其应用场景
    本文深入探讨了JavaScript中柯里化的实现机制及其应用场景。通过详细的示例代码,文章全面解析了柯里化的工作原理和实际应用,为读者提供了宝贵的学习资源,有助于提升编程技能和解决实际开发中的问题。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • 本文详细介绍了在编写jQuery插件时需要注意的关键要点,包括模块化支持、命名规范和性能优化等内容,旨在帮助开发者提高插件的质量和可维护性。 ... [详细]
  • 在MySQL中更新密码时,首先需要在DOS窗口中切换到mysql安装目录,并使用`--skip-grant-tables`参数启动MySQL服务,以跳过权限表验证。接着,在MySQL命令行中执行相应的SQL语句来设置新密码。完成密码更新后,重启MySQL服务以使更改生效。此外,对于电脑快捷方式的修改,可以通过右键点击快捷方式,选择“属性”,在弹出的窗口中进行路径或目标的修改,最后点击“应用”和“确定”保存更改。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
author-avatar
风雪漫天2702934714_713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有