roBlockCipher
5 min
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" })