PBKDF2

January 24, 2019 ยท View on GitHub

W3 specification

Operations

OperationParametersResult
importKeyNoneCryptoKey
deriveBitsPbkdf2ParamsArrayBuffer
deriveKeyPbkdf2ParamsCryptoKey

Import key

const key = await crypto.subtle.importKey(
  "raw", // only raw format
  password, // BufferSource
  "PBKDF2",
  false, // only false
  ["deriveBits", "deriveKey"],
);

Derive bits

const salt = crypto.getRandomValues(new Uint8Array(4));

const derivedBits = await crypto.subtle.deriveBits(
  {
    name: "PBKDF2",
    salt,
    iterations: 1000,
    hash: "SHA-256",
  },
  key,
  128,
);

Derive key

const salt = crypto.getRandomValues(new Uint8Array(4));

const derivedKey = await crypto.subtle.deriveKey(
  {
    name: "PBKDF2",
    salt,
    iterations: 1000,
    hash: "SHA-256",
  },
  key,
  {
    name: "AES-CBC",
    length: 128,
  },
  false,
  ["encrypt", "decrypt"],
);