Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Encriptación Asimétrica
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Encriptación Asimétrica 
 
Hola,

Dejo unas funciones que pueden ser útiles para encriptar comunicaciones, ficheros setting, ficheros ini, etc. Como todos sabéis la encriptación asimétrica permite que dos personas puedan enviarse información encriptada, sin necesidad de compartir la llave de encriptación. Se utiliza una llave pública para encriptar  y una llave privada para desencritar.

Además del uso normal de las llaves (como ficheros) se me ha ocurrido, con la finalidad de usarlo para encriptar ficheros de configuración, generar una llave privada e incluirla dentro del código fuente de forma que en tiempo de ejecución esté compilada junto con su contraseña de acceso. La llave pública se puede quedar como un fichero en un directorio de la aplicación. De esta forma podemos encriptar con la llave pública y desencriptar con la privada.

Os dejo el código (es muy simple):
Lo que me gustaría es saltarme el paso de tener que crear los ficheros temporales en los procesos. ¿Alguna idea al respecto de cómo hacerlo?

Private sCadena_encriptada As String


Private Function generar_claves(contra As String) As Boolean
  Dim sEspera As String
      'Cifrar la clave privada con DES para evitar su uso fraudulento:
   Shell Subst("openssl genrsa -out " & Application.path & "/tpv.key -passout pass:" & contra & " -des3 1024 ") To sEspera
     ' Generar claves públicas derivadas:
   Shell Subst("openssl rsa -in " & Application.path & "/tpv.key -pubout -out " & Application.path & "/tpv_publica.key -passin pass:" & contra) To sEspera
End


Private Function encripta(texto As String) As String
 Dim sEspera As String
 Dim fTamano As Float
 Dim F As File

    Shell Subst("echo -n " & texto & "| openssl rsautl -pubin -encrypt  -out " & Application.path & "/temp.txt" & " -inkey " & Application.path & "/tpv_publica.key") To sEspera
    fTamano = Stat(Application.path & "/temp.txt").Size
    F = Open Application.path & "/temp.txt" For Input 'abrirlo para lectura
    Read #f, sCadena_encriptada, fTamano 'leer el archivo y dejarlo en la variable string
    F.Close
    Try Kill Application.path & "/temp.txt"
End


Private Function desencripta(contra As String) As String
    Dim sOut As String
    Dim F As File 'declarar un manejador de fichero
    F = Open Application.path & "/temp.txt" For Create 'abrir el archivo
    Write #f, sCadena_encriptada
    F.Close 'cerrar el fichero
    Shell Subst("echo =| openssl rsautl -decrypt -in " & Application.path & "/temp.txt" & "  -inkey " & Application.path & "/tpv.key -passin pass:" & contra) To sOut
    Try Kill Application.path & "/temp.txt"
    Return sOut
End




Public Sub Button1_Click()
  generar_claves("ZzyU123K")
End

Public Sub encriptar_Click()
  encripta(TextBox1.Text)
End

Public Sub desencriptar_Click()
  TextBox2.Text = desencripta("ZzyU123K")
End
 




Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Tendría que investigar mejor el tema
para dar una opinión.

Pero, ¿Esto serviría para encriptar sqlite?

Onda para darle mayor seguridad al asunto.



Saludos
 



 
clsource - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Con esto que mencinoa nuestro compañero me parece que lo que puedes hacer es encriptar los datos que vas a guardar en la base de datos. No se sqlite pero mysql tiene funciones para encriptar hasta donde tengo entendido
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
@ljma

Tendrás problemas con las rutas al directorio de la aplicación (Application.Path) cuando eventualmente distribuyas tu programa como un paquete instalable (deb, rpm, etc) porque entonces esa ruta será de solo lectura para un usuario normal.

Nunca es buena idea recurrir al directorio de la aplicación para guardar ficheros junto al ejecutable por estas razones, así que lo ideal es hacerlo en un directorio oculto con el nombre del programa en nuestra carpeta de usuario. De esa forma siempre tendrás un control total de los ficheros dentro de ese directorio y del propio directorio, por ejemplo borrando y creando durante el tiempo de ejecución.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Hola,

Lo del directorio es un ejemplo, por poner algo, ya que lo que realmente me gustaría es no tener que crear archivos y ejecutar los comandos de forma que el resultado se almacene en variables. Las funciones para crear las llaves las he puesto por motivos didácticos ya que yo genero las llaves y luego copio el contenido de los ficheros al código fuente y así me olvido de tener que distribuir llaves. Espero que se entienda la idea.

santijav y clsource:

Con estas funciones puedes encriptar y desencriptar los datos que queráis y luego los puedes almacenar en una base de datos o en un fichero. Para SQLite hay un módulo pero no es libre: SQLite.


Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Pero con éstas funciones solo podría encriptar el archivo sqlite completamente
o solo la información dentro de las tablas?

Saludos
 



 
clsource - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Hola,

clsource:

Si encriptas la base de datos (el archivo o archivos) no la podras leer. Podrías encriptar los datos de los registros, la información.

Para esto yo lo que haría es crear una clase o una función (lo que más te guste) para manejar la base de datos sin tener que estar continuamente pendiente de la encriptación-desencriptación. Un ejemplo simple para desencriptar.


...

  hResult = hConn.Exec("select * from nombre_de_la_tabla")
  
  DO WHILE hResult.Available
  
    campo_uno = desencripta("Ztyrtrtw", hResult["columa_uno_de_la_tabla"])
    campo_dos = desencripta("Ztyrtrtw", hResult["columna_dos_del_la_tabla"])
  
     hResult.MoveNext()
  LOOP
...

Private Function desencripta(contra As String, sCadena_encriptada As String) As String
   Dim sOut As String
   Dim F As File 'declarar un manejador de fichero
   F = Open "tmp/temp.txt" For Create 'abrir el archivo
   Write #f, sCadena_encriptada
   F.Close 'cerrar el fichero
   Shell Subst("echo =| openssl rsautl -decrypt -in " & "tmp/temp.txt" & "  -inkey " & Application.path & "/tpv.key -passin pass:" & contra) To sOut
   Try Kill  "tmp/temp.txt"
   Return sOut
End

 


Coge la idea y adapta el código

Saludos
 



 
última edición por ljma el Jueves, 09 Febrero 2012, 08:28; editado 1 vez 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Hola,

Otro ejemplo: Las llaves las he generado con las funciones y la password y luego he copiado el contenido en las variables.


Private sCadena_encriptada As String
Private sLlave_privada As String
Private sLlave_publica As String
Private sPassword As String


Private Function generar_claves(contra As String) As Boolean
  Dim sEspera As String
      'Cifrar la clave privada con DES para evitar su uso fraudulento:
   Shell Subst("openssl genrsa -out " & "/tmp/tpv.key -passout pass:" & contra & " -des3 1024 ") To sEspera
     ' Generar claves públicas derivadas:
   Shell Subst("openssl rsa -in " & "/tmp/tpv.key -pubout -out " & "/tmp/tpv_publica.key -passin pass:" & contra) To sEspera
End


Private Function encripta(texto As String) As String
 Dim sEspera As String
 Dim fTamano As Float
 Dim F As File
 
    F = Open "/tmp/tpv_publica.key" For Create 'abrir el archivo
    Write #f, sLlave_publica
    F.Close 'cerrar el fichero

    Shell Subst("echo -n " & texto & "| openssl rsautl -pubin -encrypt  -out " & "/tmp/temp.txt" & " -inkey " & "/tmp/tpv_publica.key") To sEspera
    fTamano = Stat("/tmp/temp.txt").Size
    F = Open "/tmp/temp.txt" For Input 'abrirlo para lectura
    Read #f, sCadena_encriptada, fTamano 'leer el archivo y dejarlo en la variable string
    F.Close
    Try Kill "/tmp/temp.txt"
    Try Kill "/tmp/tpv_publica.key"
End


Private Function desencripta(contra As String) As String
    Dim sOut As String
    Dim F As File 'declarar un manejador de fichero

    F = Open "/tmp/tpv.key" For Create 'abrir el archivo
    Write #f, sLlave_privada
    F.Close 'cerrar el fichero
    
    F = Open "/tmp/temp.txt" For Create 'abrir el archivo
    Write #f, sCadena_encriptada
    F.Close 'cerrar el fichero
    Shell Subst("echo =| openssl rsautl -decrypt -in " & "/tmp/temp.txt" & "  -inkey " & "/tmp/tpv.key -passin pass:" & contra) To sOut
    Try Kill "/tmp/temp.txt"
    Try Kill "/tmp/tpv.key"
    Return sOut
End






Public Sub Button1_Click()
  generar_claves(sPassword)
End

Public Sub encriptar_Click()
  encripta(TextBox1.Text)
End

Public Sub desencriptar_Click()
  TextBox2.Text = desencripta(sPassword)
End



Public Sub Form_Open()

  sLlave_privada = "-----BEGIN RSA PRIVATE KEY-----" & "\n"
  sLlave_privada &= "Proc-Type: 4,ENCRYPTED" & "\n"
  sLlave_privada &= "DEK-Info: DES-EDE3-CBC,69378458BE71BDF2" & "\n"
  sLlave_privada &= "\n"
  sLlave_privada &= "e1o1hUUWeK1Ptql0VtxMSCboV2Rvy+BPVlG1GF3gEV050FBgv0fdMO+BVLNbFhm2" & "\n"
  sLlave_privada &= "0SuNfo4MIPKvQaFY9lZEFyNYeoYPfOIu+pK0kO3pE2RoHmf/vvv0hHveDewpfQ50" & "\n"
  sLlave_privada &= "eep3XgKbJ9dz+SceowlrtcgItjGvngBrWrjRyyAegsRFVLxJVR6BTgkTotarpQyQ" & "\n"
  sLlave_privada &= "1KBoGQkYdJA36u/SrWOi7bQsMUhgmLRpIAhxfy+NQMNq515E6LUfAdSOPCVJDrIP" & "\n"
  sLlave_privada &= "12eYxkyb/cZu2XKHz57wQncjHO+lirFIWVTaQQRdZ5LozO99rkEJTlMsTeghJHb3" & "\n"
  sLlave_privada &= "sUFlHQdgTQfdVJsw7KxRK8t80GPsooyW1gDH3UiGUDW1cSsHp/ItnpmEm430EKGC" & "\n"
  sLlave_privada &= "BDdzSW9eLHbjqoyw3n7uC3qM5fQRr8C+7IfhReDXkkfvTdG9HB3ZcvZIXDAktHYw" & "\n"
  sLlave_privada &= "o8iC7XGGLnO2ajgJdJpPcexgypNqwXPCFumbHd9aPMlfU3sQXP/03kdSfti+wJ44" & "\n"
  sLlave_privada &= "1wvPk7UblII88tY++IZy9D0AR2KRfpXB72TBe+CZCBXP+R69250aFVJ0ap5C11rq" & "\n"
  sLlave_privada &= "8oFhcfCHs4eJAd0qax/XOs6ZIRPmwZC9dkE4ns8ziwLfVPtSd/0rP5juvSph9C8Q" & "\n"
  sLlave_privada &= "+mGLIQtwHMOzcT+sK0Qlii6+ltd7HxQmyH+hw0qjGHRiw3F1VRJohAdBN1BmC8+d" & "\n"
  sLlave_privada &= "lUrmKIDE7vI467LHorY+hQpdLxRyBH0aTcQRcV5be6lPIucWqhV0fGQ+s9CATW9y" & "\n"
  sLlave_privada &= "c0V2nBG+tGm2iMuhyOc2i/U/27relDUglibr8Og5q7O66Qku8wrs4Q==" & "\n"
  sLlave_privada &= "-----END RSA PRIVATE KEY-----"

  sLlave_publica = "-----BEGIN PUBLIC KEY-----" & "\n"
  sLlave_publica &= "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfo9dizwZ3hiDPLYiAQsSrMpJt" & "\n"
  sLlave_publica &= "RrQU8StGeTe08EfRkcjM5cd8lWoyRDQz35RWTDLJJQPnaFRq//6vN1R/pGyjd2b5" & "\n"
  sLlave_publica &= "8IsRhqFs4W7DsW+3Nv9fjetzeJxiqjRomCvN0u7moeRv1mK0KVwbMu3cWrRpBSas" & "\n"
  sLlave_publica &= "3jDkdzNXuyGxBqVCTwIDAQAB" & "\n"
  sLlave_publica &= "-----END PUBLIC KEY-----"

  sPassword = "ZzyU123K"


End

 


El resultado aplicado en un archivo setting a prueba de cotillas


[Configuracion]

BD_HOST="\u00x0\u00x0ãÏÝ\u00x0㝌ðÞœvß&#137;ªÙ&#135;æî»&#152;Šð\u00x0î\u00x0Ší&#132;zÚß·ÔE¯Ó<q¬&#145;¬à&#146;&#136;¹\r\u00x0.²©\u00x1íßÈ«·rý\u00x1,NÿDŸgwáª9v'ÆÓßa&#152;9·\u00x0&#159;Ð\u00x1Iš&#132;«gMÑ·>©&#155;Qæ<150>N¥Ø>à\"Eü&#158;ÎÖfEiéKI·[*ÿ¶ÿö±ãª.îÇO&#132;&#134;c.©&#158;ô(&#148;žþ]&#156;­s&#135;13@òÓÝ\u00x1dób<g>àì&#148;r3ª&#145;Øf"
BD_HECHA="&#138;S\\L\u00x0F\u00x1u®y,¢HR)r\u00x1ÛšeËf&¢D}N;\u00x1Åóqã\u00x1N\\åï&#137;Á&#135;bÙ#\u00x0]wëþtNßØŸý\nO2$N& mÅ&#153;\u00x1\\&Ùü4œÂyc­&#140;ÏrOUôx Ô<ôA \u00x0ÆÞñ\u00x0²Ï¥üb,êæWv² +È®ùt£-jÐÉ/^È\u00x1õã\u00x0pi"
BD_IDIOMA="ov&#151;&#154;K\u00x0J&#146;ÓœÏçØ26*#ÿ_$wŸÐ=ÙÖdK¯ôôì\u00x0\u00x1*š^Y]\u00x18ø\u00x0ÈUTuÌ·\u00x1ΰ\n\"\u00x0HVòm&#153;&#150;øÛB°ú+~Œ&nhZN\u00x0Ñû!S&#148;&#133;%LëûÛOx5&#152;\u00x0²vEàŠ&#135;H&#130;ÁÛ&#146;\u00x1\u00x1VxŒ>&#148;M&#128;§$,@\u00x1Àd\u00x0"

 



Espero que se entienda

Saludos
 



 
última edición por ljma el Jueves, 09 Febrero 2012, 09:42; editado 2 veces 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
Gracias por los ejemplos.

Entonces ésto me serviría para encriptar los datos dentro de las tablas.
Pero no la base de datos en sí.

Encontré ésto por internet
http://sqlcipher.net/

Aunque no se cómo se podría utilizar con gambas :S

Saludos
 



 
clsource - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Encriptación Asimétrica 
 
La encriptación es un tema apasionate. clsource tienes muchos sistemas para encriptar los datos de tu base de datos, algunos estadars como los de Ijma o puedes crearte el tuyo propio. Crear un sistema de encritpación asimétrica puede ser desde lo mas sencillo hasta lo mas complicado depende de las ganas que tengas de 'complicarte' la vida. Puedes leer una cadena carácter a carácter y hacer una formula para que te otro código ascii pero así sería simétrica para conseguir la altimetría tienes que incluir una variable por ejemplo la posición del carácter dentro de la cadena así que si pones esta variable en tu fórmula consigues la altimetría.

Poco mas o menos es lo que hice yo en un programa escrito en C para encriptar ficheros de texto solo que yo lo hice con una contraseña también así que pasaba 3 valores a la formula de encriptación, el carácter original, la posición y la contraseña.

El programa lo puedes descargar desde sites.google.com/site/miprogramacionlinux que es una web que estoy creando para ir publicando mis programas.

Un saludo.
 



 
última edición por GilGalad el Sabado, 11 Febrero 2012, 00:21; editado 1 vez 
GilGalad - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
1.33 0 3 3
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Encriptación aristicol General 1 Miercoles, 30 Junio 2010, 10:13 Ver último mensaje
shordi
No hay nuevos mensajes Verificar Encriptación aristicol Aplicaciones/Fragmentos de Código 3 Viernes, 02 Julio 2010, 03:46 Ver último mensaje
aristicol
No hay nuevos mensajes Reto Encriptación Casera shordi Retos de programación 3 Martes, 07 Octobre 2014, 12:27 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario