租房小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
972 B

3 months ago
  1. var Buffer = require('buffer').Buffer;
  2. var intSize = 4;
  3. var zeroBuffer = Buffer.alloc(intSize);
  4. zeroBuffer.fill(0);
  5. var chrsz = 8;
  6. function toArray(buf, bigEndian) {
  7. if (buf.length % intSize !== 0) {
  8. var len = buf.length + (intSize - (buf.length % intSize));
  9. buf = Buffer.concat([buf, zeroBuffer], len);
  10. }
  11. var arr = [];
  12. var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
  13. for (var i = 0; i < buf.length; i += intSize) {
  14. arr.push(fn.call(buf, i));
  15. }
  16. return arr;
  17. }
  18. function toBuffer(arr, size, bigEndian) {
  19. var buf = Buffer.alloc(size);
  20. var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
  21. for (var i = 0; i < arr.length; i++) {
  22. fn.call(buf, arr[i], i * 4, true);
  23. }
  24. return buf;
  25. }
  26. function hash(buf, fn, hashSize, bigEndian) {
  27. if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);
  28. var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
  29. return toBuffer(arr, hashSize, bigEndian);
  30. }
  31. module.exports = { hash: hash };