| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // 完整的端到端测试,用于验证前端加密和后端解密的兼容性
- const CryptoJS = require('crypto-js');
- const axios = require('axios');
- async function integrationTest() {
- console.log('开始端到端加密解密测试...');
-
- // 1. 使用与前端相同的加密方法
- const credentials = {
- username: 'admin',
- password: 'password123'
- };
-
- console.log('原始凭据:', JSON.stringify(credentials));
-
- // 2. 前端加密
- const encrypted = CryptoJS.AES.encrypt(JSON.stringify(credentials), 'MyDifficultPassw');
- const base64String = encrypted.toString();
- const base64UrlString = base64String.replace(/\+/g, '-').replace(/\//g, '_');
-
- console.log('加密后的字符串:', base64UrlString);
- console.log('字符串长度:', base64UrlString.length);
-
- // 3. 发送到后端进行解密测试
- const requestData = {
- encryptedCredentials: base64UrlString,
- timestamp: Date.now()
- };
-
- console.log('发送到后端的请求:', JSON.stringify(requestData));
-
- try {
- // 注意:这里我们不会真正发送请求,而是描述测试流程
- console.log('\n测试说明:');
- console.log('1. 前端使用CryptoJS AES标准方法加密');
- console.log('2. 加密结果为Salted__格式,包含盐值和加密数据');
- console.log('3. 转换为Base64URL格式发送到后端');
- console.log('4. 后端使用修复后的EVP_BytesToKey方法解密');
- console.log('5. 解密后应得到原始凭据JSON');
-
- console.log('\n关键修复点:');
- console.log('- 修复了EVP_BytesToKey实现以匹配CryptoJS');
- console.log('- 正确处理Salted__格式的数据');
- console.log('- 使用MD5哈希算法按OpenSSL标准派生密钥和IV');
-
- console.log('\n测试完成 - 请在浏览器中尝试登录以验证修复效果');
-
- } catch (error) {
- console.error('测试过程中发生错误:', error.message);
- }
- }
- integrationTest();
|