roBlockCipher
Este objeto proporciona un medio para el cifrado simétrico por bloques. Actualmente admite cifrados AES y CBC, con tamaños de bloque de 128, 192 o 256 bits. El equivalente en JavaScript es la API Crypto de Node.js.
Creación de objetos: El objeto roBlockCipher se crea con un arreglo asociativo que representa un conjunto de parámetros.
CreateObject("roBlockCipher", parameters As roAssociativeArray)El arreglo asociativo debe contener los siguientes parámetros:
- mode: "aes-128-cbc", "aes-192-cbc", o "aes-256-cbc"
- padding: "cero" o "pkcs7". El objeto usa relleno cero de forma predeterminada si se omite este parámetro.
El relleno es necesario para entradas que no sean un múltiplo exacto del tamaño de bloque del cifrado. Especificar "cero" agregará relleno solo cuando sea necesario, mientras que especificar "pkcs7" siempre agrega relleno, incluso si los datos ya son un múltiplo del tamaño de bloque (en este caso, se agregará un bloque completo). El relleno PKCS#7 se elimina automáticamente durante el descifrado, y el relleno cero se conservará ya que no hay medios para distinguir inequívocamente los valores de relleno de los datos.
ifBlockCipher
SetIV(iv As Object) As Void
Establece el Vector de Inicialización (IV) para los modos CBC (Cipher-Block-Chaining). Si el IV proporcionado es más corto de lo requerido, se rellenará con ceros (pasar una cadena vacía establecerá el vector en todos ceros). El IV normalmente contendrá caracteres arbitrarios y tendrá la forma de un roByteArray, aunque también puede ser una cadena.
Encrypt(key As Object, plaintext As Object) As roByteArray
Usa la clave especificada para cifrar el parámetro plaintext, que puede pasarse como una cadena o como un roByteArray.
Decrypt(key As Object, cipher_text As Object) As roByteArray
Usa la clave especificada para descifrar el texto cifrado, que debe pasarse como un roByteArray. Debido a que el texto cifrado está encriptado, puede contener cualquier carácter.
Ejemplo
' This is Case#4 from RFC3602
key = CreateObject("roByteArray")
iv = CreateObject("roByteArray")
plain = CreateObject("roByteArray")
key.FromHexString("56e47a38c5598974bc46903dba290349")
iv.FromHexString("8ce82eefbea0da3c44699ed7db51b7d9") plain.FromHexString("a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf")
c = CreateObject("roBlockCipher", { mode: "aes-128-cbc" })
c.SetIV(iv)
crypt = c.Encrypt(key, plain)
result = crypt.ToHexString()
expected = UCase("c30e32ffedc0774e6aff6af0869f71aa0f3af07a9a31a9c684db207eb0ef8e4e35907aa632c3ffdf868bb7b29d3d46ad83ce9f9a102ee99d49a53e87f4c3da55")
' Decrypt example to recover the encrypted data
c.SetIV(iv)
roundtrip = c.Decrypt(key, crypt)
' Second example selecting PKCS#7 padding
c = CreateObject("roBlockCipher", { mode: "aes-128-cbc", padding: "pkcs7" })