Skip to content

واجهة برمجة التشفير على الويب

[السجل]

الإصدارالتغييرات
v23.5.0خوارزميات Ed25519 و X25519 أصبحت الآن مستقرة.
v19.0.0لم تعد تجريبية باستثناء خوارزميات Ed25519، Ed448، X25519، و X448.
v20.0.0، v18.17.0يتم الآن إجبار الوسائط والتحقق منها وفقًا لتعريفات WebIDL الخاصة بها كما هو الحال في عمليات تنفيذ واجهة برمجة التشفير على الويب الأخرى.
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
}

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

يُفصّل الجدول الخوارزميات التي تدعمها مكتبة واجهة برمجة التطبيقات المشفرة في 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 المُعطى أكبر من 65,536 بايت.

crypto.randomUUID()

مضاف في: v16.7.0

يولد معرفًا فريدًا عالميًا (UUID) عشوائيًا من الإصدار 4 وفقًا لـ RFC 4122. يتم توليد معرف UUID باستخدام مولد أعداد عشوائية زائف مشفر.

Class: 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'

Class: CryptoKeyPair

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

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

cryptoKeyPair.privateKey

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

cryptoKeyPair.publicKey

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

Class: 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])

[History]

الإصدارالتغييرات
v22.5.0, v20.17.0أصبحت معلمة الطول اختيارية الآن لـ '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)

[History]

الإصدارالتغييرات
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)

مضاف في: v15.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)

مضاف في: v15.0.0

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

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

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

subtle.exportKey(format, key)

[السجل]

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

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

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

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

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

نوع المفتاح'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)

تمت الإضافة في: v15.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تمت إزالة استيراد JWK 'NODE-DSA'.
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)

[السجل]

الإصدارالتغييرات
v18.4.0، v16.17.0تمت إضافة خوارزميات 'Ed25519' و 'Ed448'
v15.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> المختلفة. وبينما تُوصف هنا بأنها "فئات"، إلا أنها كائنات قواميس جافا سكريبت بسيطة.

الفئة: 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

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

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

الفئة: AesGcmParams

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

aesGcmParams.additionalData

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

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

aesGcmParams.iv

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

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

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

aesGcmParams.name

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

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

aesGcmParams.tagLength

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

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

الصف: 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'

الصف: EcdhKeyDeriveParams

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

ecdhKeyDeriveParams.name

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

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

ecdhKeyDeriveParams.public

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

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

الصف: EcdsaParams

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

ecdsaParams.hash

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

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

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

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

ecdsaParams.name

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

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

الصنف: EcKeyGenParams

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

ecKeyGenParams.name

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

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

ecKeyGenParams.namedCurve

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

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

الصنف: EcKeyImportParams

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

ecKeyImportParams.name

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

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

ecKeyImportParams.namedCurve

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

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

الصنف: Ed448Params

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

ed448Params.name

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

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

ed448Params.context

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

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

الصنف: 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

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

الحواشي