ADELIA |
VADELIA |
SADELIA |
WADELIA |
|
(I/B) |
(I/B) (C/S) |
(B) (S) |
(I/B) (C/S) |
Paragraphe d'utilisation
Tous
Syntaxe
DECHIFFRER Algorithme Cle VectInit Donnees Resultat
Algorithme |
Þ |
|
ConstanteAlpha | VarAlpha |
Cle |
Þ |
|
*CLE(ConstanteAlpha | VarAlpha) |
InitVect |
Þ |
|
*VECT_INIT(ConstanteAlpha | VarAlpha) | Rien |
Donnees |
Þ |
|
ConstanteAlpha Encodage | VarAlpha Encodage |
Encodage |
|
Þ |
*HEXA | *BASE64 | Rien |
Resultat |
Þ |
|
VarAlpha Normaliser |
Normaliser |
|
Þ |
*NORMALISER | Rien |
Description
Cet ordre permet de déchiffrer la chaîne en entrée en utilisant l'algorithme et la clé spécifiée.
Les algorithmes de chiffrement disponibles dépendent de la plateforme et éventuellement des composants additionnels installés. Les algorithmes DES, Triple DES (DESede), AES, RC2, RC4 et RSA sont disponibles sur toutes les plateformes.
Le contenu de la variable algorithme suit le standard de nommage Java, c'est-à-dire prend la forme ALGORITHME[/MODEBLOC/PADDING] où :
-
- ALGORITHME désigne l'algorithme de chiffrement utilisé (AES, DES).
- MODEBLOC (optionnel) désigne le mode de traitement des blocs.
Par défaut, le mode ECB est utilisé. Ce paramètre n'est pas fourni pour l'algorithme RSA. - PADDING désigne le mode de padding utilisé.
Dans un algorithme de chiffrement par bloc (hors RSA), l'algorithme de chiffrement ne peut traiter qu'un nombre entier de blocs (dont la taille dépend de l'algorithme utilisé).
Si la longueur des données à chiffrer ne correspond pas à un nombre de blocs, l'algorithme de padding est utilisé pour compléter les données du bloc.
La valeur indiquée doit correspondre à la valeur utilisée lors du chiffrement.
Adélia accepte, pour la définition du padding, une valeur spéciale "ZeroPadding", qui n'est pas un padding standard.
Si cette valeur est spécifiée, les caractères zéros terminaux seront supprimés de la donnée lors du déchiffrement.
A l'exception de l'algorithme RSA, la clé (paramètre *CLE) doit être fournie encodée en hexadécimal (la longueur de la chaîne est donc égale à deux fois la longueur de la clé).
La clé doit impérativement avoir une longueur compatible avec l'algorithme de chiffrement utilisé.
L'algorithme RSA est un algorithme asymétrique utilisant deux clés, l'une publique, l'autre privée. Ces clés doivent être fournies au format PEM.
Lorsque le chiffrement est fait à l'aide de l'une de ces clés, le déchiffrement ne peut se faire qu'à l'aide de l'autre clé.
Usuellement, le chiffrement se fait à l'aide de la clé publique et le déchiffrement à l'aide de la clé privée, mais l'inverse est possible, ce mode étant généralement utilisé pour générer une signature.
Attention : dans le cas d'une clé privée, la clé doit être encodée au format PKCS #8 (la clé doit contenir une déclaration -----BEGIN PRIVATE KEY-----, et non -----BEGIN RSA PRIVATE KEY-----).
La version Windows (OpenSSL) et certains fournisseurs de chiffrement Java (Bouncy Castle) acceptent également les clés encodées au format PKCS#1 (-----BEGIN RSA PRIVATE KEY-----).
Le vecteur d'initialisation (paramètre *VECT_INIT) est une donnée optionnelle permettant d'ajouter une partie aléatoire au mécanisme de chiffrement. S'il est fourni, il doit être identique à la valeur utilisée lors du chiffrement.
Le vecteur d'initialisation doit être fourni encodé en hexadécimal. Sa longueur correspond à la longueur d'un bloc de données dans l'algorithme de chiffrement choisi - par exemple 8 octets (16 caractères encodés) pour l'algorithme DES, ou 16 octets (32 caractères encodés) pour l'algorithme AES.
Si la longueur du vecteur d'initialisation ne correspond pas à la taille requise il sera soit tronqué, soit complété par des zéros. Si l'algorithme choisi ne nécessite pas de vecteur d'initialisation, le paramètre sera ignoré.
Le paramètre d'encodage permet d'indiquer si la donnée à déchiffrer est encodée en hexadécimal (*HEXA) ou en base 64 (*BASE64). Si rien n'est indiqué, on considère qu'elle est encodée en hexadécimal.
Le paramètre *NORMALISER doit être précisé si les données déchiffrées sont au format UTF-8 (c'est-à-dire si le paramètre "normaliser" a été utilisé au moment du chiffrement).
Pour vérifier si l'opération s'est bien déroulée, il est possible de tester le mot réservé *CODE_RETOUR.
Si une erreur a été rencontrée, ce mot réservé retourne une valeur différente de *NORMAL, et le mot réservé *MSG_RETOUR donne un descriptif de l'erreur.
Les valeurs possibles pour *CODE_RETOUR sont les suivantes :
0 |
L'opération a réussi.
|
1 |
Erreur interne du moteur de chiffrement.
|
2 |
Algorithme invalide.
|
3 |
Clé invalide (longueur, ou format de la clé dans le cas de l'algorithme RSA).
|
4 |
Vecteur d'initialisation invalide. Cette erreur n'est renvoyée que dans le cas d'un algorithme de chiffrement par bloc acceptant un vecteur d'initialisation. Dans ce cas, la longueur du vecteur d'initialisation doit correspondre à la taille du bloc de l'algorithme de chiffrement. Dans les autres cas, le vecteur d'initialisation est ignoré.
|
5 |
Données d'entrée invalides. La chaîne est vide, ou le format des données ne correspond pas à l'encodage indiqué (les données HEXA ou BASE64 ne sont pas valides).
|
6 |
Zone de sortie invalide. La variable de sortie est trop petite pour contenir les données chiffrées. |
Considérations relatives à la taille de la variable de sortie
La variable de sortie Adélia doit avoir une taille suffisante pour contenir les données chiffrées et encodées, sinon une erreur sera émise.
La taille des données binaires à déchiffrer (lenin) est soit &longueur_chaine(donnees) / 2 en hexadécimal, soit en base 64 au maximum ((&longueur_chaine(donnees) - 3) * 3) / 4.
Les considérations suivantes s'appliquent au calcul de la longueur des données déchiffrées (lenin, calculée en octets) :
-
- si aucune normalisation n'est faite :
- lenout = lenin en génération Ansi,
- lenout = lenin / 2 en génération Unicode (2 octets par caractère).
- si aucune normalisation n'est faite :
-
- si l'option *NORMALISER est spécifiée, lenout est compris entre lenin / 3 et lenin, selon la taille des caractères UTF-8.
Considérations relatives aux plateformes d'exécution
Le support des fonctions de chiffrement (algorithmes de chiffrement disponible, taille maximale des clés de chiffrement) est variable en fonction de la plateforme et de la législation applicable.
Voir la page Support du chiffrement en fonction de la plateforme pour plus d'informations.
Par exemple
* Déchiffrement simple AES, clé 128bits, données encodées en hexa
*
P_DATA = 'dbb2c1cdb7a4961341c453bd4b16a96f7552946e10bd3dff6f98e394abb442e4'
P_ALG = 'AES'
P_SECRET_KEY = '2d2086832cc2fe3fd18cb51d6c5e99a5'
DECHIFFRER P_ALG *CLE(P_SECRET_KEY) P_DATA *HEXA P_RESULT *NORMALISER
* P_RESULT = 'Données secrètes'