crypto.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. module.exports = {
  2. /**
  3. * 文件异或加密处理
  4. * @param {Buffer} fileBuffer 原文件Buffer
  5. * @param {String} key 加密KEY
  6. * @param {String} sign 加密签名
  7. * @returns {Buffer} 加密文件Buffer
  8. */
  9. xor (fileBuffer, key = '', sign = '') {
  10. if (!fileBuffer) {
  11. Editor.log('原文件Buffer不能为空');
  12. return;
  13. }
  14. let keyBuffer = Buffer.from(key);
  15. let signBuffer = Buffer.from(sign);
  16. let kIndex = 0;
  17. let keyLen = keyBuffer.length;
  18. var byteLen = fileBuffer.length;
  19. for (let i = 0; i < byteLen; i++) {
  20. if (kIndex >= keyLen) {
  21. kIndex = 0;
  22. }
  23. fileBuffer[i] ^= keyBuffer[kIndex];
  24. kIndex++;
  25. }
  26. return Buffer.concat([signBuffer, fileBuffer]);
  27. },
  28. /**
  29. * 文件异或解密处理
  30. * @param {Buffer} fileBuffer 加密文件Buffer
  31. * @param {String} key 加密KEY
  32. * @param {String} sign 加密签名
  33. * @returns {Buffer} 原文件Buffer
  34. */
  35. rox (fileBuffer, key = '', sign = '') {
  36. if (!fileBuffer) {
  37. Editor.log('加密文件Buffer不能为空');
  38. return;
  39. }
  40. let keyBuffer = Buffer.from(key);
  41. let signBuffer = Buffer.from(sign);
  42. var buffer;
  43. var result = signBuffer.compare(fileBuffer);
  44. if (result < 0 || result == 0) {
  45. buffer = fileBuffer.slice(signBuffer.length, fileBuffer.length);
  46. } else {
  47. return fileBuffer; // 没有加密的图片
  48. }
  49. let kIndex = 0;
  50. let keyLen = keyBuffer.length;
  51. var byteLen = buffer.length;
  52. for (let i = 0; i < byteLen; i++) {
  53. if (kIndex >= keyLen) {
  54. kIndex = 0;
  55. }
  56. buffer[i] ^= keyBuffer[kIndex];
  57. kIndex++;
  58. }
  59. return buffer;
  60. }
  61. };