超星登录加密

超星登录加密

本文档中的信息仅用于学术研究和交流学习之目的,不涉及任何商业或非法用途。我们已对可能涉及的敏感信息,如抓包数据、特定网址、数据接口等,进行了必要的脱敏处理,以确保信息安全。任何未经授权的转载或修改后的二次传播均被严格禁止。

若擅自使用本文所述技术而引发的任何不良后果或意外,本文作者不承担任何责任。若认为本文内容涉及侵权,请通过公众号【小马哥逆向】与我们取得联系,我们将立即进行处理。感谢您的理解和配合。

网站:aHR0cHMlM0EvL3Bhc3Nwb3J0Mi5jaGFveGluZy5jb20vbG9naW4lM0ZmaWQlM0QlMjZuZXd2ZXJzaW9uJTNEdHJ1ZSUyNnJlZmVyJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZpLmNoYW94aW5nLmNvbQ==
字段:uname,password
加密方式:AES

AES 加密简介

AES(Advanced Encryption Standard)是一种对称加密算法,它使用一个密钥来同时加密和解密数据。AES已被广泛接受并作为许多政府和行业标准中的加密算法。它提供了三种不同的密钥长度:128位、192位和256位,其中AES-256提供了最高的安全性。

AES 的主要特点

  1. 对称加密:加密和解密使用相同的密钥。
  2. 密钥长度:支持128位、192位和256位的密钥长度。
  3. 分组加密:AES是一个分组密码,它将明文分成固定长度的块(通常是128位)进行加密。
  4. 工作模式:AES可以与其他模式(如ECB、CBC、CFB、OFB、CTR等)结合使用,以增加安全性或处理数据流的特殊需求。
  5. 填充:由于明文长度可能不是块大小的整数倍,因此需要填充以确保明文长度是块大小的整数倍。AES标准中常用的填充模式是PKCS#7。

AES 的工作原理

AES加密过程可以分为几个步骤:

  1. 密钥扩展:首先,AES将输入的密钥(无论是128位、192位还是256位)通过密钥扩展算法扩展成一个更大的轮密钥序列。
  2. 初始轮:AES加密开始于一个初始轮,其中明文块与轮密钥序列中的第一个密钥进行异或操作。
  3. 多轮加密:然后,AES执行多轮(也称为“轮次”)加密操作。每轮都包含一系列的非线性变换(如S盒替换)和线性变换(如行移位和列混合)。
  4. 最终轮:在最后一轮中,加密数据块再次与轮密钥序列中的一个密钥进行异或操作,以产生密文块。

安全性考虑

  • 密钥管理:AES的安全性在很大程度上取决于密钥的安全性。密钥必须保密,并且只能由授权人员知道。
  • 选择适当的工作模式和填充:不同的工作模式和填充方式具有不同的安全性特点。例如,ECB模式不提供块之间的安全性,因此通常不推荐使用。CBC模式是一种更常见的选择。
  • 随机数生成:在使用需要随机数的模式(如CBC)时,必须使用高质量的随机数生成器来生成初始化向量(IV)。

我们打开登录页面随便输入字段进行登录
image.png
可以得到uname,password是被加密的,refer是跳转页面信息,是固定的
这个时候我们使用搜索大法,我们不去搜索password,因为这个单纯太普遍,我们去搜uname

image.png这里直接得出和加密相似的地方,我们进行断点
我们重新点击登录,发现并没有被断住,这个时候我们看上面的图,发现uname都是这个页面的,所以这个时候我们可以继续搜索uname字段,也可以搜索接口尝试下
我们搜索了请求部分,先打断点,接下来分析代码
image.png

var phone = $("#phone").val().trim(); # 得到手机号码的值
var pwd = $("#pwd").val();			#得到密码的值

加密处

let transferKey = "u2oh6Vu^HWe4_AES"; 
pwd = encryptByAES(pwd, transferKey); 
phone = encryptByAES(phone, transferKey);

根据之前文章的进断点的方法,找到加密点,

function encryptByAES(message, key){
	let CBCOptions = {
		iv: CryptoJS.enc.Utf8.parse(key),
		mode:CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	};
	let aeskey = CryptoJS.enc.Utf8.parse(key);
	let secretData = CryptoJS.enc.Utf8.parse(message);
	let encrypted = CryptoJS.AES.encrypt(
		secretData,
		aeskey,
		CBCOptions
	);
	return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

这里有个小技巧,加密方式在网站中是js生成的,在运行的时候也使用js代码生成的,python生成的和js的生成的可能存在差异

下面是代码完善和注释
为了使用CryptoJS库中的AES加密功能,你首先需要在你的项目中安装这个库。一旦安装完成,你就可以在你的JavaScript文件中导入它,并定义你的encryptByAES函数。
以下是完善后的步骤和代码示例:

  1. 安装crypto-js库(注意:在npm中,库的名称是crypto-js,而不是CryptoJS,但在代码中我们通常使用CryptoJS作为别名):
npm install crypto-js
  1. 在你的JavaScript文件中导入crypto-js
const CryptoJS = require("crypto-js"); // CommonJS (Node.js)  
// 或者如果你在浏览器中使用,你可能需要通过<script>标签引入CryptoJS  
// <script src="path/to/crypto-js.js"></script>
  1. 定义encryptByAES函数(这里稍微做了一些调整,因为encrypted.ciphertext已经是WordArray对象,我们可以直接将其转换为Base64字符串,而不需要再次调用CryptoJS.enc.Base64.stringify):
function encryptByAES(message, key){  
    // 注意:在实际应用中,密钥和初始化向量(IV)应该是不同且随机的  
    let iv = CryptoJS.lib.WordArray.random(16); // 生成随机的IV  
    let CBCOptions = {  
        iv: iv,  
        mode: CryptoJS.mode.CBC,  
        padding: CryptoJS.pad.Pkcs7  
    };  
    let aeskey = CryptoJS.enc.Utf8.parse(key); // 确保密钥是WordArray格式  
    let secretData = CryptoJS.enc.Utf8.parse(message); // 确保明文是WordArray格式  
 
    let encrypted = CryptoJS.AES.encrypt(  
        secretData,  
        aeskey,  
        CBCOptions  
    );  
 
    // 直接返回加密后的ciphertext的Base64表示  
    return encrypted.toString(); // toString() 默认使用Base64编码  
}

完整加密代码

const CryptoJS = require("crypto-js"); 

function encryptByAES(message, key){  
    // 注意:在实际应用中,密钥和初始化向量(IV)应该是不同且随机的  
    let CBCOptions = {  
        iv: CryptoJS.enc.Utf8.parse(key),  // 生成iV  
        mode: CryptoJS.mode.CBC,  
        padding: CryptoJS.pad.Pkcs7  
    };  
    let aeskey = CryptoJS.enc.Utf8.parse(key); // 确保密钥是WordArray格式  
    let secretData = CryptoJS.enc.Utf8.parse(message); // 确保明文是WordArray格式  
 
    let encrypted = CryptoJS.AES.encrypt(  
        secretData,  
        aeskey,  
        CBCOptions  
    );  
 
    // 直接返回加密后的ciphertext的Base64表示  
    return encrypted.toString(); // toString() 默认使用Base64编码  
}




let transferKey = "u2oh6Vu^HWe4_AES"; 
function jiami(jiami_str) {
    console.log(encryptByAES(jiami_str,transferKey))
}
jiami('123123123')

本文由mdnice多平台发布

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值