常见的加密算法基本分为这几类,
RSA加密:RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。(这才是正经的加密算法)
非对称加密算法:非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法
DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
AES这个标准用来替代原先的DES
DES/AES我们合并在一起介绍其用法和特点
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已(吓唬人)。
(function() {"use strict"var e=window.jQuery,t=window.qh360cp,n=window._t.pages.init=function() {
e("#city_list").siblings(".list").html(t.ui.city.get_city('<li val="<%=code%>"><%=text%></li>'))var n=e("#city_list").val()n&&e("#city").siblings(".list").html(t.ui.city.get_cities(n,'<li val="<%=code%>"><%=text%></li>')),e("#realname").on("keyup blur focusout",function(n) {
var r=e(this),i=r.val(),s=t.pages.ipt_data_chk.realname(i)t.pages.show_err(r,s.msg,s.code),n.type!="keyup"&&i!=s.val&&r.val(s.val)}
),e("#bankno").on("keyup blur focusout",function() {
var n=e(this),r=n.val()r==n[0].defaultValue&&(r="")var i=t.pages.ipt_data_chk.bankno(r),s=i.msg,o=i.codet.pages.show_err(n,s,o),r!=i.val&&n.val(i.val)}
),e("#bankno2").on("keyup blur focusout",function() {
var n="",r=0,i=e(this),s=i.val(),o=t.pages.ipt_data_chk.bankno(s)s!=e("#bankno").val()&&(n="两次输入的银行卡卡号不一致",r=1),s||(n="请再次输入银行卡卡号",r=1),t.pages.show_err(i,n,r),s!=o.val&&i.val(o.val)}
),e("#bankzh").on("keyup blur focusout",function() {
var n="",r=0,i=e(this),s=i.val()s||(n="请输入支行名称",r=1),t.pages.show_err(i,n,r)}
),t.ui.select( {
sel: "#bank",show_class:"u-select-show",box:".u-select",callback:function(e,t) {
}
}
),e("#bank").siblings(".list").find(".bank-item").on("click",function(t) {
var n=e(this),r=n.parents(".u-select")e("#bank").val(n.attr("val")),r.removeClass("u-select-show"),r.find(".txt").html(n.html()),e("#bank_tips").hide(),n.attr("zh")=="1"?e("#bank_zh").show(): e("#bank_zh").hide()
}
),t.ui.select( {
sel: "#city_list",show_class:"u-select-show",box:".u-select",callback:function(n,r) {
e("#city").siblings(".list").html(t.ui.city.get_cities(n,'<li val="<%=code%>"><%=text%></li>')),e("#city").val("").siblings(".txt-box").find(".txt").text("请选择")
}
}
),t.ui.select( {
sel: "#city",show_class:"u-select-show",box:".u-select",callback:function(t,n) {
e("#city_tips").hide()
}
}
),e("#ppass").on("keyup blur foucout",function(n) {
var r=e(this),i=r.val(),s=t.pages.ipt_data_chk.paypass(i),o=s.msg,u=s.codet.pages.show_err(r,o,u)}
),e("#zl_post").on("click",function(e) {
e.preventDefault()var n=t.pages.chk_data()n?t.lightbox.alert( {
content: n
}
):t.pages.post()}
),t.placeholder.start("#bankno"),e("body").attr("back")&&t.lightbox.show( {
html: e("#tips_box").html(),cancel_sel:".cls,.close,.lightbox_cancel",confirm_sel:".lightbox_confirm"
}
)}
,t.pages.chk_data=function() {
var t=e(".order-bd input:visible").trigger("blur"),nreturn t.each(function(t,r) {
n=n||e.trim(e(r).siblings(".red").text())}
),e("#city").val()||(n=n||e.trim(e("#city_tips").show().text())),e("#bank").val()||(n=n||e.trim(e("#bank_tips").show().text())),e.trim(n)}
,t.pages.post=function() {
var n="fcfa5d2e",r=t.sec.md5(n+"|"+e("#ppass").val()+"|"+n),i=e("#bank").val(),s=e("#realname").val(),o=e("#city").val(),u=e("#bankno").val(),a=e("#bankzh").val(),f="2",l="bankaddr="+a+"&bankid="+i+"&cardno="+u.replace(/%s/g,"")+"&city="+o+"&from="+f+"&paypass="+r+"&realname="+s+"&key=353f32ef57aceb1b90ea4cf2afacb595",c= {
bankid: i,city:o,bankaddr:a,cardno:u.replace(/%s/g,""),realname:s,paypass:r,from:f,sign:t.sec.md5(l),t:+(new Date)
}
,h=""e("#is_modi").length&&(h="/qbapissl/changebankcard/")var p='<div class="bd"><div class="clearfix">'p+='<p class="gray fsz12">提款绑定的银行卡开户行必须和您之前注册的实名一致,否则无法提款。请确认信息无误后再提交</p>',p+='<p style="padding:15px 0 0 30pxcolor:#666"><b>开户姓名:</b>'+s+"<b>提款银行:</b>"+e.trim(e("#bank").siblings(".txt-box").find(".txt").text())+"<b>银行卡号:</b>"+u+"</p>",p+='<div class="btns text-center">',p+=' <span class="btn-panel btn-panel-primary btn-panel-primary-u lightbox_confirm">确定提交</span>',p+='<span class="btn2 lightbox_cancel">返回修改</span>',p+=" </div></div></div>",t.lightbox.frame( {
content: p,confirm_sel:".lightbox_confirm",confirm_callback:function() {
t.pages.post_rst(h,c)
}
}
)}
,t.pages.post_rst=function(n,r) {
t.lightbox.loading("数据提交中..."),e.ajax( {
url: n||"/qbapissl/bindbankcard/",data:r,type:"post",dataType:"json"
}
).done(function(n) {
n=n|| {
}
if(n.result_code=="9999")t.lightbox.alert( {
tips_type: 1,content:"恭喜,银行卡绑定成功",confirm_callback:function() {
window.location.href="/pftikuan/bankinfo/"
}
}
)else {
var r=n.message||n.errmsg||"未返回数据"n.result_code=="1329"&&t.pages.show_err(e("#ppass"),r,1),t.lightbox.alert( {
content: r
}
)}
}
).fail(function() {
t.lightbox.alert( {
content: "网络不通,请刷新页面重试一次"
}
)}
)}
,e(function() {
t.pages.init()}
)}
)()
我不明白您要干什么坏事,分析什么加密,这段js代码只是用于判断,是判断什么的就不用我多说了吧,至于真正的逻辑,是用ajax发送给后台去执行的,数据在后台,前端只是获取并判断。您要怎么更改存在于后台的数据呢?还有您说的post数据是太高端,不是我们常人可以理解的。您这post敢情还是个动词。。还是您其实想说post方式提交,或者发送post请求?
您仔细看看,url是个相对路径,您知道前面的域名么?(虽然猜都能猜出来是360的域名)不知道域名您想怎么发送数据?
总而言之您的说法是前无古人后无来者,吾辈常人无法理解你们的思维
老规矩先用错误信息登陆一下抓一下包,看看有那些post字段:
大概我们就知道我们要分析的字段有nloginpwd其余字段还不清楚,就在上下在看看其他数据包,根据pubkey我们猜测加密方式大概是RSA,继续查看其他数据包,找到一个有价值的get包
信息是:
没有发现明确的关键字,但是可以猜想bg、challenge、patch应该和我们的加密参数相关,但是不确定,只有继续分析加密的js片段:
其中好几个字段都是$("#??")格式,这种表示是来自页面的,那在看看网页源码
果然发现了很多有价值的东西在post表单中的,其中只有两个参数是需要单独获取的,其余都是从html源码里面解析出来的
authcode来源
是获取的源码中的一个值,再看源码
看样子是在验证码操作的时候触发的一个请求,返回的authcode的值,查看authcode请求的数据包
这个请求看起来不是那么友好,有好几个疑似加密字段,这个参数暂时放放,继续分析我们的passWord的加密。
继续深入getEntryptPwd($('#nloginpwd').val()),查看源码
核心的就两行
encrypt.setPublicKey(pubKey)return encrypt.encrypt(pwd)这必定是RSA加密无疑了,继续查看源码,单独的一个源码文件,一共3300多行,删减版如下
JSEncrypt是前端使用的实现RSA加密的库,看样子应该比较标准,那就试试能不能改写了,复制全部源码到node.js,会提示navigator、window未定义,这个问题很简单,在文件头定义
var navigator = this
var window = this
然后在文件尾部写个调用程序试试
是可以成功返回RSA加密结果的
京东的post请求不是太难,参数也能在源码中找到,但是他的难度在发出post请求之前的一个get请求,这个get请求和验证有关,和用户名相关,简单看了一下感觉有点复杂,留在第二篇讲获取authcode参数的其他参数是怎么来的。
ID:Python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究和分享技术瓶颈,欢迎关注
独学而无友,则孤陋而寡闻!