• DE
  • ES
  • EN
  • NL

Encryptie

Details van deze implementatie

De AES-256 (CBC) versleuteling die we hier toepassen werkt als volgt:

  • Bereken de SHA-256 hash van de sleutel (resulterend in een 256-bits sleutel)
  • Bereken de SHA-256 hash van de Initialisatie-Vector en gebruik de eerste 16 bytes (128 bits) als IV voor AES-CBC
  • Versleutel de gegeven tekst met deze sleutel en Initialisatie-Vector met 256 bits AES in CBC (Cipher Block Chaining) mode via de Web Crypto API, waarna het resultaat gecodeerd wordt met Base64 codering
  • Voor ontcijferen wordt de gegeven tekst gedecodeerd van Base64 codering en ontcijferd met eerdergenoemde sleutel en Initialisatie-Vector met 256 bits AES in CBC (Cipher Block Chaining) mode


AES-256 vereist een sleutel van exact 32 bytes (256 bits) en een IV van exact 16 bytes (128 bits). Omdat de ingevoerde sleutel en IV een willekeurige lengte kunnen hebben, worden ze eerst gehasht met SHA-256 om de juiste grootte te garanderen.

De versleuteling wordt volledig in de browser uitgevoerd met de Web Crypto API. Er worden geen gegevens naar een server verzonden.

NB: spaties en dergelijke aan begin en einde van de invoer worden niet verwijderd en zijn dus van belang voor succesvolle ontcijfering!

Wat is AES?

In de cryptografie is Advanced Encryption Standard (AES) een computerversleutelingstechniek (encryptie). Het is de opvolger van de "Data Encryption Standard" (DES). AES is een subset van het Rijndael-algoritme waarbij de blokgrootte 128-bits is, en de sleutel 128, 192 of 256 bits. Rijndael zelf kan alle blokgrootten en sleutels aan die een veelvoud zijn van 32-bit met een minimum van 128-bit en een maximum van 256-bit.

Bron: Wikipedia

Hoe te programmeren in PHP?
<?php

	$key = 'my secret key';			// versleutelingssleutel
	$iv  = 'my initialisation vector';	// initialisatievector

	$text = 'Dit is een tekst';		// platte tekst om te versleutelen

	// leid 256-bits sleutel af uit SHA-256 hash
	$keyHash = hash('sha256', $key, true);

	// leid 128-bits IV af uit SHA-256 hash (eerste 16 bytes)
	$ivHash = substr(hash('sha256', $iv, true), 0, 16);

	// versleutel tekst
	$result = openssl_encrypt($text, 'aes-256-cbc', $keyHash, OPENSSL_RAW_DATA, $ivHash);

	// resultaat bevat binaire string, converteer naar
	// ASCII met Base64 codering
	$result = base64_encode($result);

	// $result bevat nu de string:
	// e.g. 'dGVzdA=='  (actual value depends on input)

Bel nu  020-7775488 , als je een andere tool nodig hebt!