Skip to content

Web Crypto API

[التاريخ]

الإصدارالتغييرات
v23.5.0أصبحت الخوارزميات Ed25519 و X25519 الآن مستقرة.
v19.0.0لم تعد تجريبية باستثناء الخوارزميات Ed25519 و Ed448 و X25519 و X448.
v20.0.0, v18.17.0يتم الآن إجبار المعلمات والتحقق من صحتها وفقًا لتعريفات WebIDL الخاصة بها كما هو الحال في تطبيقات Web Crypto API الأخرى.
v18.4.0, v16.17.0تمت إزالة تنسيق الاستيراد/التصدير الاحتكاري 'node.keyObject'.
v18.4.0, v16.17.0تمت إزالة الخوارزميات الاحتكارية 'NODE-DSA' و 'NODE-DH' و 'NODE-SCRYPT'.
v18.4.0, v16.17.0تمت إضافة الخوارزميات 'Ed25519' و 'Ed448' و 'X25519' و 'X448'.
v18.4.0, v16.17.0تمت إزالة الخوارزميات الاحتكارية 'NODE-ED25519' و 'NODE-ED448'.
v18.4.0, v16.17.0تمت إزالة المنحنيات المسماة الاحتكارية 'NODE-X25519' و 'NODE-X448' من خوارزمية 'ECDH'.

[مستقر: 2 - مستقر]

مستقر: 2 الاستقرار: 2 - مستقر

يوفر Node.js تطبيقًا لمعيار Web Crypto API.

استخدم globalThis.crypto أو require('node:crypto').webcrypto للوصول إلى هذه الوحدة.

js
const { subtle } = globalThis.crypto;

(async function() {

  const key = await subtle.generateKey({
    name: 'HMAC',
    hash: 'SHA-256',
    length: 256,
  }, true, ['sign', 'verify']);

  const enc = new TextEncoder();
  const message = enc.encode('I love cupcakes');

  const digest = await subtle.sign({
    name: 'HMAC',
  }, key, message);

})();

أمثلة

إنشاء المفاتيح

يمكن استخدام الفئة <SubtleCrypto> لإنشاء مفاتيح متماثلة (سرية) أو أزواج مفاتيح غير متماثلة (مفتاح عام ومفتاح خاص).

مفاتيح AES

js
const { subtle } = globalThis.crypto;

async function generateAesKey(length = 256) {
  const key = await subtle.generateKey({
    name: 'AES-CBC',
    length,
  }, true, ['encrypt', 'decrypt']);

  return key;
}

أزواج مفاتيح ECDSA

js
const { subtle } = globalThis.crypto;

async function generateEcKey(namedCurve = 'P-521') {
  const {
    publicKey,
    privateKey,
  } = await subtle.generateKey({
    name: 'ECDSA',
    namedCurve,
  }, true, ['sign', 'verify']);

  return { publicKey, privateKey };
}

أزواج مفاتيح Ed25519/X25519

js
const { subtle } = globalThis.crypto;

async function generateEd25519Key() {
  return subtle.generateKey({
    name: 'Ed25519',
  }, true, ['sign', 'verify']);
}

async function generateX25519Key() {
  return subtle.generateKey({
    name: 'X25519',
  }, true, ['deriveKey']);
}

مفاتيح HMAC

js
const { subtle } = globalThis.crypto;

async function generateHmacKey(hash = 'SHA-256') {
  const key = await subtle.generateKey({
    name: 'HMAC',
    hash,
  }, true, ['sign', 'verify']);

  return key;
}

أزواج مفاتيح RSA

js
const { subtle } = globalThis.crypto;
const publicExponent = new Uint8Array([1, 0, 1]);

async function generateRsaKey(modulusLength = 2048, hash = 'SHA-256') {
  const {
    publicKey,
    privateKey,
  } = await subtle.generateKey({
    name: 'RSASSA-PKCS1-v1_5',
    modulusLength,
    publicExponent,
    hash,
  }, true, ['sign', 'verify']);

  return { publicKey, privateKey };
}

التشفير وفك التشفير

js
const crypto = globalThis.crypto;

async function aesEncrypt(plaintext) {
  const ec = new TextEncoder();
  const key = await generateAesKey();
  const iv = crypto.getRandomValues(new Uint8Array(16));

  const ciphertext = await crypto.subtle.encrypt({
    name: 'AES-CBC',
    iv,
  }, key, ec.encode(plaintext));

  return {
    key,
    iv,
    ciphertext,
  };
}

async function aesDecrypt(ciphertext, key, iv) {
  const dec = new TextDecoder();
  const plaintext = await crypto.subtle.decrypt({
    name: 'AES-CBC',
    iv,
  }, key, ciphertext);

  return dec.decode(plaintext);
}

تصدير واستيراد المفاتيح

js
const { subtle } = globalThis.crypto;

async function generateAndExportHmacKey(format = 'jwk', hash = 'SHA-512') {
  const key = await subtle.generateKey({
    name: 'HMAC',
    hash,
  }, true, ['sign', 'verify']);

  return subtle.exportKey(format, key);
}

async function importHmacKey(keyData, format = 'jwk', hash = 'SHA-512') {
  const key = await subtle.importKey(format, keyData, {
    name: 'HMAC',
    hash,
  }, true, ['sign', 'verify']);

  return key;
}

تغليف وفك تغليف المفاتيح

js
const { subtle } = globalThis.crypto;

async function generateAndWrapHmacKey(format = 'jwk', hash = 'SHA-512') {
  const [
    key,
    wrappingKey,
  ] = await Promise.all([
    subtle.generateKey({
      name: 'HMAC', hash,
    }, true, ['sign', 'verify']),
    subtle.generateKey({
      name: 'AES-KW',
      length: 256,
    }, true, ['wrapKey', 'unwrapKey']),
  ]);

  const wrappedKey = await subtle.wrapKey(format, key, wrappingKey, 'AES-KW');

  return { wrappedKey, wrappingKey };
}

async function unwrapHmacKey(
  wrappedKey,
  wrappingKey,
  format = 'jwk',
  hash = 'SHA-512') {

  const key = await subtle.unwrapKey(
    format,
    wrappedKey,
    wrappingKey,
    'AES-KW',
    { name: 'HMAC', hash },
    true,
    ['sign', 'verify']);

  return key;
}

التوقيع والتحقق

js
const { subtle } = globalThis.crypto;

async function sign(key, data) {
  const ec = new TextEncoder();
  const signature =
    await subtle.sign('RSASSA-PKCS1-v1_5', key, ec.encode(data));
  return signature;
}

async function verify(key, signature, data) {
  const ec = new TextEncoder();
  const verified =
    await subtle.verify(
      'RSASSA-PKCS1-v1_5',
      key,
      signature,
      ec.encode(data));
  return verified;
}

اشتقاق البتات والمفاتيح

js
const { subtle } = globalThis.crypto;

async function pbkdf2(pass, salt, iterations = 1000, length = 256) {
  const ec = new TextEncoder();
  const key = await subtle.importKey(
    'raw',
    ec.encode(pass),
    'PBKDF2',
    false,
    ['deriveBits']);
  const bits = await subtle.deriveBits({
    name: 'PBKDF2',
    hash: 'SHA-512',
    salt: ec.encode(salt),
    iterations,
  }, key, length);
  return bits;
}

async function pbkdf2Key(pass, salt, iterations = 1000, length = 256) {
  const ec = new TextEncoder();
  const keyMaterial = await subtle.importKey(
    'raw',
    ec.encode(pass),
    'PBKDF2',
    false,
    ['deriveKey']);
  const key = await subtle.deriveKey({
    name: 'PBKDF2',
    hash: 'SHA-512',
    salt: ec.encode(salt),
    iterations,
  }, keyMaterial, {
    name: 'AES-GCM',
    length,
  }, true, ['encrypt', 'decrypt']);
  return key;
}

ملخص

js
const { subtle } = globalThis.crypto;

async function digest(data, algorithm = 'SHA-512') {
  const ec = new TextEncoder();
  const digest = await subtle.digest(algorithm, ec.encode(data));
  return digest;
}

مصفوفة الخوارزميات

يوضح الجدول الخوارزميات التي يدعمها تطبيق Web Crypto API الخاص بـ Node.js وواجهات برمجة التطبيقات المدعومة لكل منها:

الخوارزميةgenerateKeyexportKeyimportKeyencryptdecryptwrapKeyunwrapKeyderiveBitsderiveKeysignverifydigest
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
'Ed448'
'ECDH'
'X25519'
'X448'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
'HMAC'
'HKDF'
'PBKDF2'
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'

الصنف: Crypto

أضيف في: v15.0.0

globalThis.crypto هو نسخة من الصنف Crypto. Crypto هو صنف أحادي يوفر الوصول إلى بقية واجهة برمجة تطبيقات التشفير.

crypto.subtle

أضيف في: v15.0.0

يوفر الوصول إلى واجهة برمجة تطبيقات SubtleCrypto.

crypto.getRandomValues(typedArray)

أضيف في: v15.0.0

يقوم بإنشاء قيم عشوائية قوية مشفرة. يتم ملء typedArray المعطى بقيم عشوائية، ويتم إرجاع مرجع إلى typedArray.

يجب أن يكون typedArray المعطى نسخة قائمة على الأعداد الصحيحة من <TypedArray>، أي أنه لا يتم قبول Float32Array و Float64Array.

سيتم طرح خطأ إذا كان typedArray المعطى أكبر من 65536 بايت.

crypto.randomUUID()

تمت الإضافة في: الإصدار v16.7.0

يُنشئ معرّف UUID عشوائيًا RFC 4122 الإصدار 4. يتم إنشاء UUID باستخدام مولد أرقام عشوائية مشفرة.

الصنف: CryptoKey

تمت الإضافة في: الإصدار v15.0.0

cryptoKey.algorithm

تمت الإضافة في: الإصدار v15.0.0

كائن يوضح بالتفصيل الخوارزمية التي يمكن استخدام المفتاح من أجلها جنبًا إلى جنب مع معلمات إضافية خاصة بالخوارزمية.

للقراءة فقط.

cryptoKey.extractable

تمت الإضافة في: الإصدار v15.0.0

عندما تكون القيمة true، يمكن استخراج <CryptoKey> باستخدام إما subtleCrypto.exportKey() أو subtleCrypto.wrapKey().

للقراءة فقط.

cryptoKey.type

تمت الإضافة في: الإصدار v15.0.0

  • النوع: <string> أحد القيم التالية: 'secret' أو 'private' أو 'public'.

سلسلة تحدد ما إذا كان المفتاح متماثلًا ('secret') أو غير متماثل ('private' أو 'public').

cryptoKey.usages

تمت الإضافة في: الإصدار v15.0.0

مصفوفة من السلاسل تحدد العمليات التي يمكن استخدام المفتاح من أجلها.

الاستخدامات المحتملة هي:

  • 'encrypt' - يمكن استخدام المفتاح لتشفير البيانات.
  • 'decrypt' - يمكن استخدام المفتاح لفك تشفير البيانات.
  • 'sign' - يمكن استخدام المفتاح لإنشاء تواقيع رقمية.
  • 'verify' - يمكن استخدام المفتاح للتحقق من التواقيع الرقمية.
  • 'deriveKey' - يمكن استخدام المفتاح لاشتقاق مفتاح جديد.
  • 'deriveBits' - يمكن استخدام المفتاح لاشتقاق البتات.
  • 'wrapKey' - يمكن استخدام المفتاح لتغليف مفتاح آخر.
  • 'unwrapKey' - يمكن استخدام المفتاح لفك تغليف مفتاح آخر.

تعتمد الاستخدامات الصالحة للمفتاح على خوارزمية المفتاح (التي يتم تحديدها بواسطة cryptokey.algorithm.name).

نوع المفتاح'encrypt''decrypt''sign''verify''deriveKey''deriveBits''wrapKey''unwrapKey'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'X25519'
'X448'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

الفئة: CryptoKeyPair

تمت إضافتها في: v15.0.0

CryptoKeyPair هو كائن قاموس بسيط مع خصائص publicKey و privateKey ، ويمثل زوج مفاتيح غير متماثل.

cryptoKeyPair.privateKey

تمت إضافتها في: v15.0.0

cryptoKeyPair.publicKey

تمت إضافتها في: v15.0.0

الفئة: SubtleCrypto

تمت إضافتها في: v15.0.0

subtle.decrypt(algorithm, key, data)

تمت إضافتها في: v15.0.0

باستخدام الطريقة والمعلمات المحددة في algorithm ومواد المفاتيح التي توفرها key، تحاول subtle.decrypt() فك تشفير data المقدمة. إذا نجح الأمر، فسيتم حل الوعد المرتجع باستخدام <ArrayBuffer> الذي يحتوي على نتيجة النص العادي.

تتضمن الخوارزميات المدعومة حاليًا ما يلي:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'

subtle.deriveBits(algorithm, baseKey[, length])

[سجل التغييرات]

الإصدارالتغييرات
v22.5.0, v20.17.0أصبح الآن المعامل length اختياريًا لـ 'ECDH' و 'X25519' و 'X448'.
v18.4.0, v16.17.0تمت إضافة الخوارزميات 'X25519' و 'X448'.
v15.0.0تمت إضافته في: v15.0.0

باستخدام الطريقة والمعلمات المحددة في algorithm والمادة الأساسية المتوفرة بواسطة baseKey، تحاول subtle.deriveBits() إنشاء length من البتات.

عندما لا يتم توفير length أو كانت null، يتم إنشاء الحد الأقصى لعدد البتات لخوارزمية معينة. هذا مسموح به لخوارزميات 'ECDH' و 'X25519' و 'X448'، أما بالنسبة للخوارزميات الأخرى، فيجب أن يكون length رقمًا.

إذا نجحت العملية، فسيتم حل الوعد المرتجع باستخدام <ArrayBuffer> يحتوي على البيانات التي تم إنشاؤها.

تتضمن الخوارزميات المدعومة حاليًا ما يلي:

  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HKDF'
  • 'PBKDF2'

subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)

[سجل التغييرات]

الإصدارالتغييرات
v18.4.0, v16.17.0تمت إضافة الخوارزميات 'X25519' و 'X448'.
v15.0.0تمت إضافته في: v15.0.0

باستخدام الطريقة والمعلمات المحددة في algorithm والمادة الأساسية المتوفرة بواسطة baseKey، تحاول subtle.deriveKey() إنشاء <CryptoKey> جديد بناءً على الطريقة والمعلمات الموجودة في derivedKeyAlgorithm.

يُعادل استدعاء subtle.deriveKey() استدعاء subtle.deriveBits() لإنشاء مادة أساسية أولية، ثم تمرير النتيجة إلى طريقة subtle.importKey() باستخدام معلمات deriveKeyAlgorithm و extractable و keyUsages كمدخلات.

تتضمن الخوارزميات المدعومة حاليًا ما يلي:

  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HKDF'
  • 'PBKDF2'

subtle.digest(algorithm, data)

تمت الإضافة في: الإصدار 15.0.0

باستخدام الطريقة المحددة بواسطة algorithm، تحاول subtle.digest() إنشاء ملخص لـ data. إذا نجحت، فسيتم حل الوعد الذي تم إرجاعه باستخدام <ArrayBuffer> الذي يحتوي على الملخص المحسوب.

إذا تم توفير algorithm كسلسلة <string>، فيجب أن تكون إحدى القيم التالية:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا تم توفير algorithm كـ <Object>، فيجب أن يحتوي على خاصية name تكون قيمتها إحدى القيم المذكورة أعلاه.

subtle.encrypt(algorithm, key, data)

تمت الإضافة في: الإصدار 15.0.0

باستخدام الطريقة والمعلمات المحددة بواسطة algorithm والمواد الرئيسية التي توفرها key، تحاول subtle.encrypt() تشفير data. إذا نجحت، فسيتم حل الوعد الذي تم إرجاعه باستخدام <ArrayBuffer> الذي يحتوي على النتيجة المشفرة.

تتضمن الخوارزميات المدعومة حاليًا ما يلي:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'

subtle.exportKey(format, key)

[سجل التغييرات]

الإصدارالتغييرات
الإصدار 18.4.0، الإصدار 16.17.0تمت إضافة خوارزميات 'Ed25519' و 'Ed448' و 'X25519' و 'X448'.
الإصدار 15.9.0تمت إزالة تصدير 'NODE-DSA' JWK.
الإصدار 15.0.0تمت الإضافة في: الإصدار 15.0.0

يُصدِّر المفتاح المحدد إلى التنسيق المحدد، إذا كان مدعومًا.

إذا كان <CryptoKey> غير قابل للاستخراج، فسيتم رفض الوعد الذي تم إرجاعه.

عندما يكون format إما 'pkcs8' أو 'spki' ويكون التصدير ناجحًا، فسيتم حل الوعد الذي تم إرجاعه باستخدام <ArrayBuffer> الذي يحتوي على بيانات المفتاح المصدرة.

عندما يكون format هو 'jwk' ويكون التصدير ناجحًا، فسيتم حل الوعد الذي تم إرجاعه باستخدام كائن JavaScript يتوافق مع مواصفات JSON Web Key.

نوع المفتاح'spki''pkcs8''jwk''raw'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

subtle.generateKey(algorithm, extractable, keyUsages)

تمت الإضافة في: الإصدار 15.0.0

باستخدام الطريقة والمعلمات المقدمة في algorithm، تحاول subtle.generateKey() إنشاء مواد مفاتيح جديدة. اعتمادًا على الطريقة المستخدمة، قد تنشئ الطريقة إما <CryptoKey> واحدًا أو <CryptoKeyPair>.

تتضمن خوارزميات إنشاء <CryptoKeyPair> (المفتاح العام والخاص) المدعومة ما يلي:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'RSA-OAEP'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'ECDH'
  • 'X25519'
  • 'X448'

تتضمن خوارزميات إنشاء <CryptoKey> (المفتاح السري) المدعومة ما يلي:

  • 'HMAC'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

subtle.importKey(format, keyData, algorithm, extractable, keyUsages)

[السجل]

الإصدارالتغييرات
v18.4.0, v16.17.0تمت إضافة الخوارزميات 'Ed25519' و 'Ed448' و 'X25519' و 'X448'.
v15.9.0تمت إزالة استيراد 'NODE-DSA' JWK.
v15.0.0تمت الإضافة في: v15.0.0

تحاول الطريقة subtle.importKey() تفسير keyData المقدمة باعتبارها format معينة لإنشاء مثيل <CryptoKey> باستخدام وسيطات algorithm و extractable و keyUsages المقدمة. إذا كان الاستيراد ناجحًا، فسيتم حل الوعد الذي تم إرجاعه باستخدام <CryptoKey> الذي تم إنشاؤه.

إذا تم استيراد مفتاح 'PBKDF2'، فيجب أن يكون extractable هو false.

تتضمن الخوارزميات المدعومة حاليًا:

نوع المفتاح'spki''pkcs8''jwk''raw'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'X25519'
'X448'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

subtle.sign(algorithm, key, data)

[سجل التغييرات]

الإصدارالتغييرات
الإصداران v18.4.0 و v16.17.0تمت إضافة الخوارزميات 'Ed25519' و 'Ed448'.
الإصدار v15.0.0تمت إضافته في الإصدار: v15.0.0

باستخدام الطريقة والمعلمات التي قدمتها algorithm ومواد المفاتيح التي قدمتها key، تحاول subtle.sign() إنشاء توقيع تشفيري لـ data. إذا نجحت العملية، يتم حل الوعد المُعاد مع <ArrayBuffer> يحتوي على التوقيع المُنشأ.

تتضمن الخوارزميات المدعومة حاليًا ما يلي:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'HMAC'

subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)

تمت إضافته في الإصدار: v15.0.0

في علم التشفير، تشير عبارة "تغليف مفتاح" إلى تصدير ثم تشفير مادة المفاتيح. تحاول طريقة subtle.unwrapKey() فك تشفير مفتاح مُغلف وإنشاء مثيل <CryptoKey>. وهو ما يعادل استدعاء subtle.decrypt() أولاً على بيانات المفتاح المشفرة (باستخدام وسائط wrappedKey وunwrapAlgo وunwrappingKey كمدخلات) ثم تمرير النتائج إلى طريقة subtle.importKey() باستخدام وسائط unwrappedKeyAlgo وextractable وkeyUsages كمدخلات. إذا نجحت العملية، يتم حل الوعد المُعاد مع كائن <CryptoKey>.

تتضمن خوارزميات التغليف المدعومة حاليًا ما يلي:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

تتضمن خوارزميات المفاتيح غير المُغلفة المدعومة ما يلي:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'RSA-OAEP'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HMAC'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

subtle.verify(algorithm, key, signature, data)

[التاريخ]

الإصدارالتغييرات
الإصدار 18.4.0، 16.17.0تمت إضافة خوارزميات 'Ed25519'، و 'Ed448'.
الإصدار 15.0.0تمت الإضافة في: v15.0.0

باستخدام الطريقة والمعلمات المحددة في algorithm ومواد المفاتيح التي توفرها key، تحاول subtle.verify() التحقق من أن signature هو توقيع تشفير صالح لـ data. يتم حل الوعد الذي تم إرجاعه إما بـ true أو false.

تتضمن الخوارزميات المدعومة حاليًا:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'HMAC'

subtle.wrapKey(format, key, wrappingKey, wrapAlgo)

تمت الإضافة في: v15.0.0

في علم التشفير، تشير "تغليف المفتاح" إلى تصدير ثم تشفير مادة المفتاح. تقوم الطريقة subtle.wrapKey() بتصدير مادة المفتاح إلى التنسيق المحدد بواسطة format، ثم تقوم بتشفيرها باستخدام الطريقة والمعلمات المحددة بواسطة wrapAlgo ومادة المفتاح التي توفرها wrappingKey. إنه يعادل استدعاء subtle.exportKey() باستخدام format و key كوسيطات، ثم تمرير النتيجة إلى الطريقة subtle.encrypt() باستخدام wrappingKey و wrapAlgo كمدخلات. إذا نجح الأمر، فسيتم حل الوعد الذي تم إرجاعه باستخدام <ArrayBuffer> يحتوي على بيانات المفتاح المشفرة.

تتضمن خوارزميات التغليف المدعومة حاليًا:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

معلمات الخوارزمية

تحدد كائنات معلمات الخوارزمية الأساليب والمعلمات التي تستخدمها طرق <SubtleCrypto> المختلفة. على الرغم من وصفها هنا بأنها "فئات"، إلا أنها مجرد كائنات قاموس JavaScript بسيطة.

الفئة: AlgorithmIdentifier

تمت الإضافة في: v18.4.0, v16.17.0

algorithmIdentifier.name

تمت الإضافة في: v18.4.0, v16.17.0

الفئة: AesCbcParams

تمت الإضافة في: v15.0.0

aesCbcParams.iv

تمت الإضافة في: v15.0.0

يوفر متجه التهيئة. يجب أن يكون طوله 16 بايتًا بالضبط ويجب أن يكون غير متوقع وعشوائيًا مشفرًا.

aesCbcParams.name

تمت الإضافة في: v15.0.0

  • النوع: <string> يجب أن يكون 'AES-CBC'.

الفئة: AesCtrParams

تمت الإضافة في: v15.0.0

aesCtrParams.counter

تمت الإضافة في: v15.0.0

القيمة الأولية لكتلة العداد. يجب أن يكون هذا الطول 16 بايتًا بالضبط.

تستخدم طريقة AES-CTR أقصى length بتات على اليمين من الكتلة كعداد والباقي كقيمة عشوائية.

aesCtrParams.length

تمت الإضافة في: v15.0.0

  • النوع: <number> عدد البتات في aesCtrParams.counter التي سيتم استخدامها كعداد.

aesCtrParams.name

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون 'AES-CTR'.

الفئة: AesGcmParams

تمت الإضافة في: الإصدار 15.0.0

aesGcmParams.additionalData

تمت الإضافة في: الإصدار 15.0.0

باستخدام طريقة AES-GCM، تكون additionalData مدخلات إضافية غير مشفرة ولكنها مضمنة في مصادقة البيانات. استخدام additionalData اختياري.

aesGcmParams.iv

تمت الإضافة في: الإصدار 15.0.0

يجب أن يكون متجه التهيئة فريدًا لكل عملية تشفير باستخدام مفتاح معين.

من الناحية المثالية، هذه قيمة حتمية مكونة من 12 بايت يتم حسابها بطريقة تضمن أنها فريدة عبر جميع الاستدعاءات التي تستخدم نفس المفتاح. بدلاً من ذلك، قد يتكون متجه التهيئة من 12 بايت عشوائية مشفرة على الأقل. لمزيد من المعلومات حول إنشاء متجهات تهيئة لـ AES-GCM، راجع القسم 8 من NIST SP 800-38D.

aesGcmParams.name

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون 'AES-GCM'.

aesGcmParams.tagLength

أُضيف في: v15.0.0

  • النوع: <number> حجم علامة المصادقة التي تم إنشاؤها بالبت. يجب أن تكون هذه القيم إحدى القيم التالية: 32 أو 64 أو 96 أو 104 أو 112 أو 120 أو 128. افتراضي: 128.

‏Class: AesKeyGenParams

أُضيف في: v15.0.0

aesKeyGenParams.length

أُضيف في: v15.0.0

طول مفتاح AES المراد إنشاؤه. يجب أن يكون إما 128 أو 192 أو 256.

aesKeyGenParams.name

أُضيف في: v15.0.0

  • النوع: <string> يجب أن يكون أحد هذه القيم: 'AES-CBC' أو 'AES-CTR' أو 'AES-GCM' أو 'AES-KW'

‏Class: EcdhKeyDeriveParams

أُضيف في: v15.0.0

ecdhKeyDeriveParams.name

أُضيف في: v15.0.0

  • النوع: <string> يجب أن يكون 'ECDH' أو 'X25519' أو 'X448'.

ecdhKeyDeriveParams.public

أُضيف في: v15.0.0

تعمل اشتقاق مفتاح ECDH عن طريق أخذ المفتاح الخاص لأحد الطرفين والمفتاح العام للطرف الآخر كمدخلات - باستخدام كليهما لإنشاء سر مشترك. يتم تعيين الخاصية ecdhKeyDeriveParams.public على المفتاح العام للطرف الآخر.

‏Class: EcdsaParams

أُضيف في: v15.0.0

ecdsaParams.hash

أُضيف في: v15.0.0

إذا تم تمثيلها على أنها <string>، فيجب أن تكون القيمة إحدى القيم التالية:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا تم تمثيلها على أنها <Object>، فيجب أن يكون للكائن خاصية name تكون قيمتها إحدى القيم المذكورة أعلاه.

ecdsaParams.name

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون 'ECDSA'.

‏Class: ‏EcKeyGenParams

تمت الإضافة في: الإصدار 15.0.0

ecKeyGenParams.name

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون أحد 'ECDSA' أو 'ECDH'.

ecKeyGenParams.namedCurve

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون أحد 'P-256' أو 'P-384' أو 'P-521'.

‏Class: ‏EcKeyImportParams

تمت الإضافة في: الإصدار 15.0.0

ecKeyImportParams.name

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون أحد 'ECDSA' أو 'ECDH'.

ecKeyImportParams.namedCurve

تمت الإضافة في: الإصدار 15.0.0

  • النوع: <string> يجب أن يكون أحد 'P-256' أو 'P-384' أو 'P-521'.

‏Class: ‏Ed448Params

تمت الإضافة في: الإصدار 15.0.0

ed448Params.name

تمت الإضافة في: الإصدار 18.4.0، الإصدار 16.17.0

  • النوع: <string> يجب أن يكون 'Ed448'.

ed448Params.context

تمت الإضافة في: الإصدار 18.4.0، الإصدار 16.17.0

يمثل العضو context بيانات السياق الاختيارية المراد ربطها بالرسالة. يدعم تطبيق Node.js Web Crypto API سياقًا بطول صفري فقط وهو ما يعادل عدم توفير سياق على الإطلاق.

الفئة: HkdfParams

أُضيفت في: v15.0.0

hkdfParams.hash

أُضيفت في: v15.0.0

إذا مُثّلت كـ <string>، يجب أن تكون القيمة واحدة من:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا مُثّلت كـ <Object>، يجب أن يكون للكائن الخاصية name التي تكون قيمتها واحدة من القيم المذكورة أعلاه.

hkdfParams.info

أُضيفت في: v15.0.0

يوفر مدخلات سياقية خاصة بالتطبيق لخوارزمية HKDF. يمكن أن يكون هذا الطول صفرًا ولكن يجب توفيره.

hkdfParams.name

أُضيفت في: v15.0.0

  • النوع: <string> يجب أن يكون 'HKDF'.

hkdfParams.salt

أُضيفت في: v15.0.0

تعمل قيمة الملح بشكل كبير على تحسين قوة خوارزمية HKDF. يجب أن تكون عشوائية أو شبه عشوائية ويجب أن يكون لها نفس طول إخراج دالة التلخيص (على سبيل المثال، إذا تم استخدام 'SHA-256' كملخص، فيجب أن يكون الملح عبارة عن 256 بت من البيانات العشوائية).

الصنف: HmacImportParams

أُضيف في: الإصدار v15.0.0

hmacImportParams.hash

أُضيف في: الإصدار v15.0.0

إذا مُثِّل كـ <string>، فيجب أن تكون القيمة واحدة من:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا مُثِّل كـ <Object>، فيجب أن يكون للكائن الخاصية name التي تكون قيمتها واحدة من القيم المدرجة أعلاه.

hmacImportParams.length

أُضيف في: الإصدار v15.0.0

العدد الاختياري للبتات في مفتاح HMAC. هذا اختياري ويجب حذفه في معظم الحالات.

hmacImportParams.name

أُضيف في: الإصدار v15.0.0

  • النوع: <string> يجب أن يكون 'HMAC'.

الصنف: HmacKeyGenParams

أُضيف في: الإصدار v15.0.0

hmacKeyGenParams.hash

أُضيف في: الإصدار v15.0.0

إذا مُثِّل كـ <string>، فيجب أن تكون القيمة واحدة من:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا مُثِّل كـ <Object>، فيجب أن يكون للكائن الخاصية name التي تكون قيمتها واحدة من القيم المدرجة أعلاه.

hmacKeyGenParams.length

أُضيف في: الإصدار v15.0.0

عدد البتات التي سيتم إنشاؤها لمفتاح HMAC. إذا تم حذفه، فسيتم تحديد الطول بواسطة خوارزمية التجزئة المستخدمة. هذا اختياري ويجب حذفه في معظم الحالات.

hmacKeyGenParams.name

تمت إضافته في: v15.0.0

  • النوع: <string> يجب أن يكون 'HMAC'.

الصنف: Pbkdf2Params

تمت إضافته في: v15.0.0

pbkdb2Params.hash

تمت إضافته في: v15.0.0

إذا مُثِّل كـ <string>، يجب أن تكون القيمة إحدى القيم التالية:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا مُثِّل كـ <Object>، يجب أن يكون للكائن خاصية name وتكون قيمتها إحدى القيم المذكورة أعلاه.

pbkdf2Params.iterations

تمت إضافته في: v15.0.0

عدد التكرارات التي يجب أن تقوم بها خوارزمية PBKDF2 عند استخلاص البتات.

pbkdf2Params.name

تمت إضافته في: v15.0.0

  • النوع: <string> يجب أن يكون 'PBKDF2'.

pbkdf2Params.salt

تمت إضافته في: v15.0.0

يجب أن يكون على الأقل 16 بايت عشوائية أو شبه عشوائية.

الصنف: RsaHashedImportParams

تمت إضافته في: v15.0.0

rsaHashedImportParams.hash

تمت إضافته في: v15.0.0

إذا مُثِّل كـ <string>، يجب أن تكون القيمة إحدى القيم التالية:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا مُثِّل كـ <Object>، يجب أن يكون للكائن خاصية name وتكون قيمتها إحدى القيم المذكورة أعلاه.

rsaHashedImportParams.name

أضيف في: الإصدار v15.0.0

  • النوع: <string> يجب أن يكون واحدًا من 'RSASSA-PKCS1-v1_5' أو 'RSA-PSS' أو 'RSA-OAEP'.

الصنف: RsaHashedKeyGenParams

أضيف في: الإصدار v15.0.0

rsaHashedKeyGenParams.hash

أضيف في: الإصدار v15.0.0

إذا تم تمثيلها كـ <string>، يجب أن تكون القيمة واحدة من:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'

إذا تم تمثيلها كـ <Object>، يجب أن يحتوي الكائن على خاصية name تكون قيمتها واحدة من القيم المذكورة أعلاه.

rsaHashedKeyGenParams.modulusLength

أضيف في: الإصدار v15.0.0

طول نموذج RSA بالبتات. كأفضل ممارسة، يجب أن يكون هذا على الأقل 2048.

rsaHashedKeyGenParams.name

أضيف في: الإصدار v15.0.0

  • النوع: <string> يجب أن يكون واحدًا من 'RSASSA-PKCS1-v1_5' أو 'RSA-PSS' أو 'RSA-OAEP'.

rsaHashedKeyGenParams.publicExponent

أضيف في: الإصدار v15.0.0

أس RSA العام. يجب أن يكون هذا <Uint8Array> يحتوي على عدد صحيح كبير النهاية وغير موقع يجب أن يتناسب مع 32 بت. قد يحتوي <Uint8Array> على عدد عشوائي من البتات الصفرية البادئة. يجب أن تكون القيمة عددًا أوليًا. ما لم يكن هناك سبب لاستخدام قيمة مختلفة، استخدم new Uint8Array([1, 0, 1]) (65537) كأس العام.

الفئة: RsaOaepParams

أُضيفت في: v15.0.0

rsaOaepParams.label

أُضيفت في: v15.0.0

مجموعة إضافية من البايتات التي لن يتم تشفيرها، ولكن سيتم ربطها بالنص المشفر الذي تم إنشاؤه.

المعلمة rsaOaepParams.label اختيارية.

rsaOaepParams.name

أُضيفت في: v15.0.0

  • النوع: <string> يجب أن تكون 'RSA-OAEP'.

الفئة: RsaPssParams

أُضيفت في: v15.0.0

rsaPssParams.name

أُضيفت في: v15.0.0

  • النوع: <string> يجب أن تكون 'RSA-PSS'.

rsaPssParams.saltLength

أُضيفت في: v15.0.0

طول (بالبايت) الملح العشوائي المراد استخدامه.

حواشي سفلية