# Ayuda con Crypto

**URL:** <https://forum.xojo.com/t/ayuda-con-crypto/75212>\
**Category:** Español\
**Created:** [April 5, 2023, 2:11pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212 "2023-04-05T14:11:24Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 2:11pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/1 "2023-04-05T14:11:24Z")

</div>

Estoy un poco perdido con la función Crypto, lo que deseo es darle una codificación a una password que tenga un poco más de seguridad que base64, pienso que seria suficiente con 256, mi duda es como genero una función básica que lo Encripte y otro que lo Desencripte.

He revisado en el Foro pero no hay nada claro, me podrían dar una mano? para Xojo 2022r4 o superior.

---

<div class="post-metadata">

**Author:** ![brian\_franco](https://forum.xojo.com/user_avatar/forum.xojo.com/brian_franco/32/156_2.png) [@brian\_franco](https://forum.xojo.com/u/brian_franco)\
**Post date:** [April 5, 2023, 2:25pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/2 "2023-04-05T14:25:21Z")

</div>

Hello @Mauricio_Tanco ,

[https://www.youtube.com/watch?v=tlFIuiT14as](https://www.youtube.com/watch?v=tlFIuiT14as)

[https://www.youtube.com/watch?v=3whgd0zU7-w](https://www.youtube.com/watch?v=3whgd0zU7-w)

Might help you

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 3:03pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/3 "2023-04-05T15:03:18Z")

</div>

@brian_franco excelente, baje el codigo del RSA pero no hace nada (creo que le falta el codigo al botón) y del AES que es el que me interesa no vi código para bajar, sabes si existe algun link para bajarlo?.

---

<div class="post-metadata">

**Author:** ![AlbertoD](https://forum.xojo.com/letter_avatar_proxy/v4/letter/a/dbc845/32.png) [@AlbertoD](https://forum.xojo.com/u/AlbertoD)\
**Post date:** [April 5, 2023, 3:16pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/4 "2023-04-05T15:16:55Z")

</div>

Este es el código que se usa en el video:

```auto
var message as String = "Xojo is an awesome programming language!"
var encrypted as MemoryBlock 
var decrypted as MemoryBlock
var key as MemoryBlock 
var vector as MemoryBlock
// Create the key and the vector
key = Crypto.GenerateRandomBytes(16)
vector = Crypto. GenerateRandomBytes(16)
// Encrypt the message!
encrypted = Crypto.AESEncrypt(key, message, Crypto.BlockModes.CBC, vector)
// MessageBox(encrypted)
decrypted = Crypto.AESDecrypt(key, encrypted, Crypto.BlockModes.CBC, vector)
MessageBox(decrypted)

```

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 3:17pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/5 "2023-04-05T15:17:10Z")

</div>

@brian_franco muchas gracias con ese video lo codifique.

var message as String = “Mensaje en secreto de Xojo”

var encrypted as MemoryBlock  
var decrypted as MemoryBlock

var key as MemoryBlock  
var vector as MemoryBlock

key = Crypto.GenerateRandomBytes(16)  
vector = Crypto.GenerateRandomBytes(16)

encrypted = Crypto.AESEncrypt(key, message, Crypto.BlockModes.CBC, vector)  
print encrypted

decrypted = Crypto.AESDecrypt(key, encrypted, Crypto.BlockModes.CBC, vector)  
print decrypted

MessageBox (decrypted)

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 3:18pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/6 "2023-04-05T15:18:59Z")

</div>

Gracias! justo lo estaba pasando @AlbertoD  
Soy nuevo en eso del Crypto, disculpas y gracias a ambos!

---

<div class="post-metadata">

**Author:** ![AlbertoD](https://forum.xojo.com/letter_avatar_proxy/v4/letter/a/dbc845/32.png) [@AlbertoD](https://forum.xojo.com/u/AlbertoD)\
**Post date:** [April 5, 2023, 3:21pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/7 "2023-04-05T15:21:20Z")

</div>

No hay por qué disculparse, mi mensaje sólo es indicar que no hay link para bajar el código porque es muy simple.

Gracias al ‘Live Text’ con Ventura pude copiar y pegar el código.

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 3:31pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/8 "2023-04-05T15:31:14Z")

</div>

Interesante @AlbertoD yo también tengo Ventura voy a probarlo.

Acabo de agregar un nuevo tema:

> [@Link con codigos al estilo VB6](https://forum.xojo.com/t/link-con-codigos-al-estilo-vb6/75215):
>
> Estimados, algo que extraño de VB6 que no he visto en XOJO y quizás puedan implementar facilmente son las web con códigos utilizables, que todos en algún momento debimos usar. Tenian un titulo con detalle y link de descarga del ejemplo, recuerdo muchos sitios en VB6 que fueron muy útiles, hoy tenemos cantidad de aportes en la comunidad que quedan perdidos en el foro, seria bueno “juntarlos”. Se que esta la documentación de ayuda y los ejemplos que incluye el Xojo, pero no tienen comparación a …

Porque veo que los aportes de usuarios como tú son muy importantes y estaria bueno disponer de algún repositorio, solo al estilo vb6 donde se ponia un detalle y link para descargar el código, estaria bueno que xojo implementara algo asi para que todos podamos aportar.

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 3:45pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/9 "2023-04-05T15:45:50Z")

</div>

Quiero generar una función donde se pase el mensaje (sea sin codificar o codificado) y haga la operación opuesta, en lo siguiente me da error:

Public Function CryptoSN(message as String, strSN as String) As string

var key as MemoryBlock  
var vector as MemoryBlock  
key = Crypto.GenerateRandomBytes(16)  
vector = Crypto.GenerateRandomBytes(16)

var resultado as MemoryBlock  
if strSN = “S” then  
resultado = Crypto.AESEncrypt(key, message, Crypto.BlockModes.CBC, vector)  
else  
resultado = Crypto.AESDecrypt(key, message, Crypto.BlockModes.CBC, vector)  
end if  
return resultado

Encripta bien, el error es al desencriptar…  
CryptoException:  
**StreamTransformationFilter: ciphertext length is not a multiple of block size**

---

<div class="post-metadata">

**Author:** ![AlbertoD](https://forum.xojo.com/letter_avatar_proxy/v4/letter/a/dbc845/32.png) [@AlbertoD](https://forum.xojo.com/u/AlbertoD)\
**Post date:** [April 5, 2023, 4:01pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/10 "2023-04-05T16:01:55Z")

</div>

Un problema que veo es que cada vez que ejecutas esa función creas una nueva key/vector, así que cualquier cosa que encriptaste con anterioridad no podrá ser desencriptado ya que key/vector serán diferentes.

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 4:06pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/11 "2023-04-05T16:06:12Z")

</div>

ah correcto, necesito el key, vector almacenarlo con la clave para luego poder desencriptar.  
me queda la duda si puedo manejar el MemoryBlock como string sin problemas.

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 5, 2023, 11:51pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/12 "2023-04-05T23:51:42Z")

</div>

@AlbertoD una consulta quizás me puedas ayudar, tengo las variables Key y Resultado con el Encode, el Decode me funciona bien mientras lo tengo en variables, PERO cuando lo grabo a MySQL en campos Varchar y los vuelvo a leer el Decode me da error, puede ser que se pierda al guadarlo en mysql?

Error:

# decryptAES with the incorrect key throws InvalidCiphertext(“StreamTransformationFilter: invalid PKCS #7 block padding found”

---

<div class="post-metadata">

**Author:** ![AlbertoD](https://forum.xojo.com/letter_avatar_proxy/v4/letter/a/dbc845/32.png) [@AlbertoD](https://forum.xojo.com/u/AlbertoD)\
**Post date:** [April 6, 2023, 12:02am UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/13 "2023-04-06T00:02:34Z")

</div>

¿Cómo estás grabando al MySQL?  
¿Cómo lo pasas del MySQL de regreso al key MemoryBlock?

Edito: tal vez te sirva usar EncodeHex y DecodeHex ?

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 6, 2023, 9:29pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/14 "2023-04-06T21:29:10Z")

</div>

Estoy grabando el string obtenido directamente con un insert en mysql en un campo varchar.  
De igual forma lo leo como .StringValue , sospecho que hay una perdida ahi del valor obtenido anteriormente.

---

<div class="post-metadata">

**Author:** ![AlbertoD](https://forum.xojo.com/letter_avatar_proxy/v4/letter/a/dbc845/32.png) [@AlbertoD](https://forum.xojo.com/u/AlbertoD)\
**Post date:** [April 6, 2023, 9:59pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/15 "2023-04-06T21:59:15Z")

</div>

Me imagino que tienes problemas con el Encoding y por eso te indicaba el usar EncodeHex/DecodeHex para que el string del memoryblock pueda ser guardado en la base de datos.

Algo como esto:

```auto
Var key As MemoryBlock
key = Crypto.GenerateRandomBytes(16)

Dim s As String = key.StringValue(0, 16)

Dim s2 As String = EncodeHex(s)

//guardas s2 en la base de datos

Dim key2 As MemoryBlock
key2 = DecodeHex(s2)

```

Nota: yo no he trabajado con Crypto y tampoco grabado memoryblock keys en base de datos. La información que pongo es con la poca experiencia que tengo al respecto pero que tiene sentido (si he visto la documentación, el video que pusieron un link aquí y un par de los ejemplos que vienen con Xojo). Ojalá te funcione.

---

<div class="post-metadata">

**Author:** ![Mauricio\_Tanco](https://forum.xojo.com/user_avatar/forum.xojo.com/mauricio_tanco/32/760_2.png) [@Mauricio\_Tanco](https://forum.xojo.com/u/Mauricio_Tanco)\
**Post date:** [April 7, 2023, 3:33pm UTC](https://forum.xojo.com/t/ayuda-con-crypto/75212/16 "2023-04-07T15:33:03Z")

</div>

Muchas gracias, en base a eso solucione!
