diff --git a/lib/plugins/json.js b/lib/plugins/json.js
index caf63de9..8f09772e 100644
--- a/lib/plugins/json.js
+++ b/lib/plugins/json.js
@@ -8,9 +8,16 @@
 var inherits = require('util').inherits;
 var Transform = require('readable-stream').Transform;
 
-var crc32 = require('buffer-crc32');
 var util = require('archiver-utils');
 
+var crc32Unsigned;
+
+try {
+  crc32Unsigned = require('@node-rs/crc32').crc32;
+} catch (e) {
+  crc32Unsigned = require('buffer-crc32').unsigned;
+}
+
 /**
  * @constructor
  * @param {(JsonOptions|TransformOptions)} options
@@ -78,7 +85,7 @@ Json.prototype.append = function(source, data, callback) {
     }
 
     data.size = sourceBuffer.length || 0;
-    data.crc32 = crc32.unsigned(sourceBuffer);
+    data.crc32 = crc32Unsigned(sourceBuffer);
 
     self.files.push(data);
 
diff --git a/package-lock.json b/package-lock.json
index 247b18a5..772ecabf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,94 @@
       "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==",
       "dev": true
     },
+    "@napi-rs/triples": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.2.tgz",
+      "integrity": "sha512-EL3SiX43m9poFSnhDx4d4fn9SSaqyO2rHsCNhETi9bWPmjXK3uPJ0QpPFtx39FEdHcz1vJmsiW41kqc0AgvtzQ==",
+      "optional": true
+    },
+    "@node-rs/crc32": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.1.0.tgz",
+      "integrity": "sha512-f3LSfNx3jw93ThDF8SrFOCGeKqBt9gOnOdUyPiBL6peQ5qS8035ByilkNUomcz7OpaAXtRjNWSanP+E2/XKTFw==",
+      "optional": true,
+      "requires": {
+        "@node-rs/crc32-android-arm64": "^1.1.0",
+        "@node-rs/crc32-darwin-arm64": "^1.1.0",
+        "@node-rs/crc32-darwin-x64": "^1.1.0",
+        "@node-rs/crc32-linux-arm-gnueabihf": "^1.1.0",
+        "@node-rs/crc32-linux-arm64-gnu": "^1.1.0",
+        "@node-rs/crc32-linux-x64-gnu": "^1.1.0",
+        "@node-rs/crc32-linux-x64-musl": "^1.1.0",
+        "@node-rs/crc32-win32-ia32-msvc": "^1.1.0",
+        "@node-rs/crc32-win32-x64-msvc": "^1.1.0",
+        "@node-rs/helper": "^1.1.0"
+      }
+    },
+    "@node-rs/crc32-android-arm64": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.1.0.tgz",
+      "integrity": "sha512-DXcsyCmTXEHr+aCocDtrSTBkIghvQ87rZNxQrThpNU3RgCAvCtNCPJw4F8/Il5MXN3c+xzl/ZglN03USqSPmAA==",
+      "optional": true
+    },
+    "@node-rs/crc32-darwin-arm64": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.1.0.tgz",
+      "integrity": "sha512-dE04JL+w4+V0YBw+nrnzw7U0c5yTtAWg1jelNuZl+4BWCFrkHpAmUR+dHiz2OhZvbKV7RApwDNmYbvG+ppYK0Q==",
+      "optional": true
+    },
+    "@node-rs/crc32-darwin-x64": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.1.0.tgz",
+      "integrity": "sha512-/nfj8EixjXc3iuyR5CybB2vOzQ23xjv/MrQiWtozcS2mLNsbMG/Ue0C9QLq4FQbL6HXEnhbrVbAQnByNurP4Ew==",
+      "optional": true
+    },
+    "@node-rs/crc32-linux-arm-gnueabihf": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.1.0.tgz",
+      "integrity": "sha512-RX7VTEKfM/KMLeRMw89vJdsdvxZafoHQrwUvR290vuHE2Zfqc10YQQMJvq0iU7IaKmgDAnYZtUPhSAv1FdbtFQ==",
+      "optional": true
+    },
+    "@node-rs/crc32-linux-arm64-gnu": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.1.0.tgz",
+      "integrity": "sha512-Age/YDyYhQEMSBZgHx4RhHXx6xcWNSGA3jDBu5NcBXo5dZZ2b3HAOjosdhfHqTGIrOdd+CAx3BqO5O46UiLU2Q==",
+      "optional": true
+    },
+    "@node-rs/crc32-linux-x64-gnu": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.1.0.tgz",
+      "integrity": "sha512-QUB3hkejwnziEyOT4zo51/qHEAW6YMs3eogQxOyB/IIkji8SwC1dgx94PC6MypBWSnjs2eAi0UiiZh6iK5+7kw==",
+      "optional": true
+    },
+    "@node-rs/crc32-linux-x64-musl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.1.0.tgz",
+      "integrity": "sha512-avmN8ZU69+U1kUZ9CKjhpBcwL4LD29pg+sRJ4+zQSbqbAqOaMfWsvEemKymfOENrQJLR80azwKWfgxldP7/X3A==",
+      "optional": true
+    },
+    "@node-rs/crc32-win32-ia32-msvc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.1.0.tgz",
+      "integrity": "sha512-91SMBA7836eubTR9sd2xCwYt6c2MZwBw8j0x+jt3bxn32opgcwL4n6O89lKpMRZO8k6S8An51hBs1nYBB/5Wwg==",
+      "optional": true
+    },
+    "@node-rs/crc32-win32-x64-msvc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.1.0.tgz",
+      "integrity": "sha512-dqEQP+PxidHalhaEdat/54pGKx/aVIt7FDgWho5AEp2Wfc90aUdH4o1UX/sE4azDejo7eXc+kUHrTn3ZZWrRfw==",
+      "optional": true
+    },
+    "@node-rs/helper": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.1.0.tgz",
+      "integrity": "sha512-r43YnnrY5JNzDuXJdW3sBJrKzvejvFmFWbiItUEoBJsaPzOIWFMhXB7i5j4c9EMXcFfxveF4l7hT+rLmwtjrVQ==",
+      "optional": true,
+      "requires": {
+        "@napi-rs/triples": "^1.0.2",
+        "tslib": "^2.1.0"
+      }
+    },
     "@ungap/promise-all-settled": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@@ -1125,6 +1213,12 @@
         "is-number": "^7.0.0"
       }
     },
+    "tslib": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+      "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+      "optional": true
+    },
     "type-detect": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
diff --git a/package.json b/package.json
index ccbad9a2..6f905f59 100644
--- a/package.json
+++ b/package.json
@@ -47,6 +47,9 @@
     "tar": "^6.1.0",
     "yauzl": "^2.9.0"
   },
+  "optionalDependencies": {
+    "@node-rs/crc32": "^1.1.0"
+  },
   "keywords": [
     "archive",
     "archiver",