ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Help / WLanguage / WLanguage functions / Standard functions / Encryption/compression functions
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Décrypte un message préalablement crypté avec un algorithme de chiffrement standard.
Contrairement aux fonctions Crypte et Décrypte, les fonctions CrypteStandard et DécrypteStandard utilisent des algorithmes de cryptage standard qui permettent d'échanger des messages cryptés entre des plateformes d'exécution différentes (Windows, Linux, Android, Java, iOS, PHP, etc.) et/ou avec des outils tiers.
// Cryptage d'une chaîne de caractères en utilisant l'algorithme AES
sMessage est un Buffer = "Message à crypter"
sMotPasse est une chaîne ANSI = "mot de passe"
bufClé est un Buffer = HashChaîne(HA_MD5_128, sMotPasse)
bufCrypte est un Buffer = CrypteStandard(sMessage, bufClé, crypteAES128)
// Décryptage
bufRésultat est un Buffer = DécrypteStandard(bufCrypte, bufClé, crypteAES128)
Info(bufRésultat)
Syntaxe
<Résultat> = DécrypteStandard(<Message crypté> , <Clé> [, <Algorithme> [, <Mode d'opération> [, <Remplissage>]]])
<Résultat> : Buffer binaire
  • Résultat du décryptage du message spécifié,
  • Chaîne vide ("") en cas d'erreur. Pour plus de détails sur l'erreur, utilisez la fonction ErreurInfo.
<Message crypté> : Buffer binaire
Message à décrypter. Ce message peut être le résultat du cryptage obtenu lors de l'appel de la fonction CrypteStandard.
Ce buffer doit être composé de deux parties :
  • Le vecteur d'initialisation (Initialisation Vector ou IV) utilisé pour crypter les données.
  • Les données cryptées.
Si le message a été crypté :
  • avec la fonction CrypteStandard, ce paramètre doit correspondre à la valeur retournée par la fonction.
  • par un outil tiers, il est nécessaire de construire le buffer en concaténant les données cryptées au vecteur d'initialisation utilisé.
Remarque : si le mode d'opération spécifié est crypteECB, aucun vecteur d'initialisation n'a été utilisé pour crypter le message et dans ce cas le paramètre doit correspondre directement aux données cryptées.
<Clé> : Buffer
Clé avec laquelle les données ont été cryptées. Cette clé doit être identique à celle fournie lors du cryptage du message.
<Algorithme> : Constante optionnelle de type Entier
Algorithme de cryptage utilisé. Ce paramètre doit correspondre à l'algorithme utilisé pour le cryptage du message.
crypte3DESTriple Data Encryption Standard.
  • Taille de la clé : 192 bits.
  • Taille des blocs : 64 bits.
  • Taille du vecteur d'initialisation (IV) : 64 bits.
crypteAES128
(Valeur par défaut)
Advanced Encryption Standard.
  • Taille de la clé : 128 bits.
  • Taille des blocs : 128 bits.
  • Taille du vecteur d'initialisation (IV) : 128 bits.
crypteAES256Advanced Encryption Standard.
  • Taille de la clé : 256 bits.
  • Taille des blocs : 128 bits.
  • Taille du vecteur d'initialisation (IV) : 128 bits.
crypteDESData Encryption Standard.
  • Taille de la clé : 64 bits.
  • Taille des blocs : 64 bits.
  • Taille du vecteur d'initialisation (IV) : 64 bits.
Attention : cet algorithme est actuellement déprécié.
<Mode d'opération> : Constante optionnelle de type Entier
Mode de traitement des blocs par l'algorithme de cryptage utilisé. Ce paramètre doit correspondre au mode d'opération utilisé pour le cryptage du message.
crypteCBC
(Valeur par défaut)
Cipher Block Chaining - Enchaînement des blocs.
crypteCFBCipher Feedback - Chiffrement à rétroaction. Ce mode de traitement est disponible uniquement si l'algorithme utilisé correspond à la constante crypteAES256.
AndroidWidget AndroidJavaPHP Cette constante n'est pas disponible.
crypteCTRCipher Counter - Chiffrement basé sur un compteur. Ce mode de traitement est disponible uniquement si l'algorithme utilisé correspond à la constante crypteAES256.
AndroidWidget AndroidJavaPHP Cette constante n'est pas disponible.
crypteECBElectronic Code Book - Dictionnaire de codes. Ce mode d'opération est déconseillé et ne devrait être utilisé que pour des raisons de compatibilité.
<Remplissage> : Constante optionnelle de type Entier
Mode de remplissage des données cryptées pour être compatibles avec la taille requise par les algorithmes de cryptage par blocs. Ce paramètre doit correspondre au mode de remplissage utilisé pour le cryptage du message.
cryptePaddingPKCS
(Valeur par défaut)
Les données sont complétées par des octets dont la valeur correspond au nombre total d'octets ajoutés pour atteindre la taille requise.
cryptePaddingZéroLes données sont complétées par des zéros binaires jusqu'à obtenir la taille requise.
Liste des exemples associés :
Les fonctions de chiffrement (CrypteXXX, DécrypteXXX) Exemples unitaires (WINDEV) : Les fonctions de chiffrement (CrypteXXX, DécrypteXXX)
[ + ] Utilisation des fonctions de chiffrement de WINDEV.
Cet exemple permet de :
- Chiffrer une chaîne de caractères
- Déchiffrer une chaîne de caractères
Classification Métier / UI : Code métier
Composante : wd290com.dll
Minimum version required
  • Version 20
Comments
Exemplo com Fonte
https://repository.windev.com/resource.awp?file_id=281474976711928;exemplo-cryptografia-descryptografia
Boller
15 Mar. 2024
OBS
É muito importante fazer o encode e o decode base 64 quando usar em arquivos de texto ou arquivos ini, pois existe varios formatos de arquivos sendo eles: ansi, unicode, utf-8. E uma vez encodado e decodando a criptofrafia e descriptografia vai funcionar perfeitamente pois os caracteres originais estaram cifrados, se nao fazer o encode e decode os caracteres armazenados nao vao bater e a senha usada sera inutil e nao dara certo o procedimento.

Il est très important d'encoder et de décoder la base 64 lors de l'utilisation de fichiers texte ou de fichiers ini, car il existe plusieurs formats de fichiers : ansi, unicode, utf-8. Et une fois encodés et décodés, le cryptage et le décryptage fonctionneront parfaitement car les caractères originaux seront cryptés, si vous n'encodez pas et ne décodez pas les caractères stockés ne correspondront pas et le mot de passe utilisé sera inutile et la procédure ne fonctionnera pas.

It is very important to encode and decode base 64 when using text
Boller
15 Mar. 2024
Exemplo 1
E no Windev Mobile
//Criptografia
buf_conteudo_sig is Buffer = "Meu nome é Adriano Boller"
B_senha is Buffer = HashString(HA_HMAC_MD5_128, "bob-esponja")
B_resultado_Criptografado is Buffer = CryptStandard(buf_conteudo_sig, B_senha, cryptAES128)
B_resultado_Criptografado=Encode(B_resultado_Criptografado, encodeBASE64)

Info(B_resultado_Criptografado)


//Descriptografia
B_senha = HashString(HA_HMAC_MD5_128, "bob-esponja")
B_resultado_Descriptografado is Buffer = Decode(B_resultado_Criptografado, encodeBASE64)
B_resultado_Descriptografado = UncryptStandard(B_resultado_Descriptografado, B_senha, cryptAES128)

Info(B_resultado_Descriptografado )
Boller
15 Mar. 2024
Exemplo 2
Example
//Exemplo para Criptografar
// se usar a criptografia em um arquivo texto ou ini deve fazer encode 64 bits.

sMessage is Buffer = "Message to encrypt"
bufKey is Buffer = HashString(HA_CKSUM_64, "password")
bufEncrypt is Buffer = CryptStandard(sMessage, bufKey, cryptDES)
bufEncrypt = Encode(bufEncrypt, encodeBASE64)
Info(bufEncrypt)

// Exemplo para Decriptografar
bufKey = HashString(HA_CKSUM_64, "password")
sResult is Buffer = Decode(bufEncrypt, encodeBASE64)
sResult = UncryptStandard(sResult, bufKey, cryptDES)
Info(sResult)
Boller
15 Mar. 2024
Non comptabile avec PHP > 7.2
si l'on utilise DecryptStandard() pour décrypter une chaine venant de Windev via CryptStandard(), bug avec PHP 7.3 /7.4 et 8

Bug signalé en v24 (il y a 2 ans) numéro référence 114 749/392270 qui devait être corrigé en v26.... mais qui ne l'ai pas.
Julien MOREL
10 Dec. 2020

Last update: 06/17/2022

Send a report | Local help