AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de cifrado/compresión
  • Resultados obtenidos con el cifrado AES
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Cifra una cadena de caracteres o un búfer binario utilizando un algoritmo de cifrado simétrico (AES, DES, etc.).. Este mensaje cifrado puede ser descifrado por DecryptStandard.
A diferencia de las funciones Cifrar y Descifrar, las funciones EncryptStandard y DecryptStandard utilizan algoritmos de cifrado estándar que permiten intercambiar mensajes cifrados entre diferentes plataformas de ejecución (Windows, Linux, Android, Java, iOS, PHP, etc.) y/o con herramientas externas.
Observación: Llamar por primera vez a la función EncryptStandard puede tardar bastante tiempo porque debe inicializarse la aleatorización.
// Encrypt a character string by using the AES algorithm
// ------------------------------------------------------------------
bufMessage is Buffer = "Message to encrypt"
bufKey is Buffer = HashString(HA_MD5_128, "password")
bufEncrypt is Buffer = EncryptStandard(bufMessage, bufKey, cryptAES128)
 
// Decrypt in WLanguage
-------------------------
bufResult is Buffer = DecryptStandard(bufEncrypt, bufKey, cryptAES128)
Info(bufResult)
// Encryption in WLanguage
// ---------------------
bufMessage is Buffer = "Message to encrypt"
bufKey is Buffer = HashString(HA_MD5_128, "string to encrypt")
bufEncrypt is Buffer = EncryptStandard(bufMessage, bufKey, cryptAES128)
 
//---------------------------------------------------------------
// Decrypt via a call to the Mcrypt API of PHP
nSizeIV is int = 128 / 8
bufIV is Buffer = bufEncrypt[[ TO nSizeIV]]
bufData is Buffer = bufEncrypt[[nSizeIV+1 TO]]
 
EXTERNE mcrypt_decrypt//PHP API (to be done in a WEBDEV PHP server process)
Trace(mcrypt_decrypt( "rijndael-128", bufKey, bufData, "cbc", bufIV))
Sintaxis
<Result> = EncryptStandard(<Message> , <Key> [, <Algorithm> [, <Operation mode> [, <Padding> [, <Initialization vector>]]]])
<Result>: Búfer binario
  • Resultado del cifrado del mensaje especificado,
  • Cadena vacía ("") si se produce un error. Para obtener más información sobre el error, utilice la función ErrorInfo.
Este buffer incluye dos secciones:
  • El vector de inicialización (IV) que corresponde a un bloque de bits generado aleatoriamente (o especificado con ) que se ha combinado con el primer bloque de datos cifrados.. Este vector es necesario para permitir el descifrado del mensaje. Su tamaño corresponde al tamaño de los bloques utilizados por el algoritmo de cifrado (véase el parámetro ).
  • Los datos encriptados.
Si el mensaje debe ser desencriptado:
  • por DecryptStandard, todo lo que tienes que hacer es pasar todo el buffer a la función.
  • por una herramienta externa, el búfer debe ser dividido para separar el vector de inicialización de los datos encriptados (ver el ejemplo).
Observación: Si el modo especificado es cryptECB , no se utiliza ningún vector de inicialización y, en este caso, la función devuelve los datos cifrados directamente.
<Message>: Búfer binario
Mensaje a cifrar.
<Key>: Buffer
Clave con la que se deben encriptar los datos. El tamaño de esta clave depende del algoritmo de cifrado utilizado. El tamaño de la clave debe corresponderse con el del algoritmo.
Le recomendamos que utilice las funciones de hash (HashString, por ejemplo) para crear una clave a partir de una contraseña. Una contraseña larga que incluye varios caracteres alfanuméricos y símbolos distintivos proporciona una mejor seguridad de cifrado.
Desarrollo multiplataforma: Para la cadena de caracteres manipular, se debe utilizar el mismo formato en todas las plataformas. Le aconsejamos que utilice cadenas en formato UTF 8 (y que convierta las cadenas Unicode si es necesario)..
<Algorithm>: Constante opcional de tipo Integer
Algoritmo de encriptación a utilizar:
crypt3DESEstándar de cifrado de datos triple.
  • Tamaño de la llave: 192 bits.
  • Tamaño de los bloques: 64 bits.
  • Tamaño del vector de inicialización (IV): 64 bits.
cryptAES128
(Valor predeterminado)
Estándar de Cifrado Avanzado AES.
  • Tamaño de la llave: 128 bits.
  • Tamaño de los bloques: 128 bits.
  • Tamaño del vector de inicialización (IV): 128 bits.
cryptAES256Estándar de Cifrado Avanzado AES.
  • Tamaño de la llave: 256 bits.
  • Tamaño de los bloques: 128 bits.
  • Tamaño del vector de inicialización (IV): 128 bits.
cryptDESEstándar de cifrado de datos.
  • Tamaño de la llave: 64 bits.
  • Tamaño de los bloques: 64 bits.
  • Tamaño del vector de inicialización (IV): 64 bits.
Atención: este algoritmo está actualmente obsoleto.
<Operation mode>: Constante opcional de tipo Integer
Modo Process de bloques por el algoritmo de encriptación:
cryptCBC
(Valor predeterminado)
Encadenamiento de bloques de cifrado - Secuencia de bloques
cryptCFBCipher Feedback - Cifrado de retroalimentación. Este modo de proceso está disponible si el algoritmo utilizado corresponde a la constante cryptAES256.
AndroidWidget Android JavaPHP Esta constante no está disponible.
cryptCTRContador de cifrado - Cifrado basado en un contador. Este modo de proceso está disponible si el algoritmo utilizado corresponde a la constante cryptAES256.
AndroidWidget Android JavaPHP Esta constante no está disponible.
cryptECBLibro de códigos electrónicos - Diccionario de códigos. Este modo no se recomienda y solo debe usarse por razones de compatibilidad..
No se utiliza ningún vector de inicialización, y en este caso la función devuelve directamente los datos cifrados.
<Padding>: Constante opcional de tipo Integer
Modo de relleno para que los datos cifrados sean compatibles con el tamaño requerido por los algoritmos de cifrado por bloques:
cryptPaddingPKCS
(Valor predeterminado)
Los datos se rellenan con bytes cuyo valor corresponde al número total de bytes añadidos para alcanzar el tamaño solicitado.
cryptPaddingZeroLos datos se rellenan con ceros binarios hasta que se alcanza el tamaño solicitado.
<Initialization vector>: Búfer opcional
Vector de inicialización (IV) que se utilizará para el cifrado. El tamaño del búfer depende del algoritmo de cifrado (parámetro <Algorithm<). Si no se especifica este parámetro, el vector de inicialización se genera aleatoriamente.
Atención: Este parámetro solo debe usarse si necesita un vector de inicialización personalizado en su proyecto. En caso contrario, se recomienda encarecidamente mantener la generación del vector de inicialización en modo aleatorio.
PHP Este parámetro no está disponible.
Observaciones

Resultados obtenidos con el cifrado AES

La encriptación realizada con un algoritmo AES utiliza un vector de inicialización. Este vector de inicialización se modifica cada vez que se llama a la función. Por lo tanto, es normal que get obtenga un resultado diferente cada vez que la misma información es encriptada. Sin embargo, el valor esperado se recupera correctamente cuando se llama a DecryptStandard.
Clasificación Lógica de negocio / UI: Lógica de negocio
Componente: wd290com.dll
Versión mínima requerida
  • Versión 20
Esta página también está disponible para…
Comentarios
Exemplo com Fonte
https://repository.windev.com/resource.awp?file_id=281474976711928;exemplo-cryptografia-descryptografia
Boller
15 03 2024
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 03 2024
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 03 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.
Boller
15 03 2024
Valida Criptografia e Descriptografia
//Chave valida sem caracteres especiais ASCII invisiveis e sem espaços em branco ou quebras de linha


loop
resultado = criaChave(valor) //cria a chave usando cryptstandar
if valida(resultado) = true //valida regras
break // se ok para de criar
end
end
BOLLER
09 05 2018
How to actually work between WD/WM/WB
https://forum.pcsoft.fr/en-US/pcsoft.us.windevmobile/2019-wm20-w20-uncryptstandard-cryptstandard/read.awp?hl=*
Jose
25 04 2018

Última modificación: 24/06/2023

Señalar un error o enviar una sugerencia | Ayuda local