test-encryption.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // 测试加密功能与后端的兼容性
  2. const CryptoJS = require('crypto-js');
  3. // 模拟登录凭据
  4. const credentials = {
  5. username: 'testuser',
  6. password: 'testpass'
  7. };
  8. console.log('原始凭据:', JSON.stringify(credentials));
  9. // 使用当前前端的加密方法
  10. const plainText = JSON.stringify(credentials);
  11. const secretKey = 'MyDifficultPassw';
  12. const encrypted = CryptoJS.AES.encrypt(plainText, secretKey);
  13. const base64String = encrypted.toString();
  14. console.log('加密后的完整字符串:', base64String);
  15. console.log('加密后的字符串长度:', base64String.length);
  16. // 转换为Base64URL格式(后端期望的格式)
  17. let base64UrlString = base64String.replace(/\+/g, '-').replace(/\//g, '_');
  18. console.log('Base64URL格式字符串:', base64UrlString);
  19. console.log('Base64URL格式字符串长度:', base64UrlString.length);
  20. // 测试解密以验证加密是否正确
  21. try {
  22. const decryptedBytes = CryptoJS.AES.decrypt(base64String, secretKey);
  23. const decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8);
  24. console.log('解密后数据:', decryptedData);
  25. console.log('解密是否成功:', JSON.stringify(credentials) === decryptedData);
  26. } catch (error) {
  27. console.error('解密失败:', error);
  28. }
  29. // 模拟后端解密逻辑的处理步骤
  30. console.log('\n--- 模拟后端处理 ---');
  31. // 1. 后端接收到Base64URL格式
  32. const receivedString = base64UrlString;
  33. console.log('后端接收到的字符串:', receivedString);
  34. // 2. 后端转换回标准Base64格式
  35. const standardBase64 = receivedString.replace(/-/g, '+').replace(/_/g, '/');
  36. console.log('转换回标准Base64格式:', standardBase64);
  37. // 3. 确保适当的填充
  38. let paddedBase64 = standardBase64;
  39. const paddingNeeded = (4 - (standardBase64.length % 4)) % 4;
  40. for (let i = 0; i < paddingNeeded; i++) {
  41. paddedBase64 += '=';
  42. }
  43. console.log('填充后的Base64格式:', paddedBase64);
  44. // 4. 尝试解密
  45. try {
  46. const decrypted = CryptoJS.AES.decrypt(paddedBase64, secretKey);
  47. const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
  48. console.log('后端解密结果:', decryptedText);
  49. console.log('后端解密是否成功:', JSON.stringify(credentials) === decryptedText);
  50. } catch (error) {
  51. console.error('后端解密失败:', error);
  52. }