// 测试加密功能与后端的兼容性 const CryptoJS = require('crypto-js'); // 模拟登录凭据 const credentials = { username: 'testuser', password: 'testpass' }; console.log('原始凭据:', JSON.stringify(credentials)); // 使用当前前端的加密方法 const plainText = JSON.stringify(credentials); const secretKey = 'MyDifficultPassw'; const encrypted = CryptoJS.AES.encrypt(plainText, secretKey); const base64String = encrypted.toString(); console.log('加密后的完整字符串:', base64String); console.log('加密后的字符串长度:', base64String.length); // 转换为Base64URL格式(后端期望的格式) let base64UrlString = base64String.replace(/\+/g, '-').replace(/\//g, '_'); console.log('Base64URL格式字符串:', base64UrlString); console.log('Base64URL格式字符串长度:', base64UrlString.length); // 测试解密以验证加密是否正确 try { const decryptedBytes = CryptoJS.AES.decrypt(base64String, secretKey); const decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); console.log('解密后数据:', decryptedData); console.log('解密是否成功:', JSON.stringify(credentials) === decryptedData); } catch (error) { console.error('解密失败:', error); } // 模拟后端解密逻辑的处理步骤 console.log('\n--- 模拟后端处理 ---'); // 1. 后端接收到Base64URL格式 const receivedString = base64UrlString; console.log('后端接收到的字符串:', receivedString); // 2. 后端转换回标准Base64格式 const standardBase64 = receivedString.replace(/-/g, '+').replace(/_/g, '/'); console.log('转换回标准Base64格式:', standardBase64); // 3. 确保适当的填充 let paddedBase64 = standardBase64; const paddingNeeded = (4 - (standardBase64.length % 4)) % 4; for (let i = 0; i < paddingNeeded; i++) { paddedBase64 += '='; } console.log('填充后的Base64格式:', paddedBase64); // 4. 尝试解密 try { const decrypted = CryptoJS.AES.decrypt(paddedBase64, secretKey); const decryptedText = decrypted.toString(CryptoJS.enc.Utf8); console.log('后端解密结果:', decryptedText); console.log('后端解密是否成功:', JSON.stringify(credentials) === decryptedText); } catch (error) { console.error('后端解密失败:', error); }