Diferencia entre revisiones de «Grupo de Cabina de votación (2014-15)»
 (→Descifrado con JAVA)  | 
				 (→¡Advertencias!)  | 
				||
| Línea 73: | Línea 73: | ||
== ¡Advertencias! ==  | == ¡Advertencias! ==  | ||
*1. La cadena esta codificada en BASE64  | *1. La cadena esta codificada en BASE64  | ||
| − | *2. La cadena puede contener "\n" y en java puede dar problemas  | + | *2. La cadena puede contener "\n" y en java puede dar problemas. Esos caracteres '''SÍ''' son necesarios.  | 
*3. La cadena(en un 95% de las veces) puede finalizar en "\n". Eso no pertenece al cifrado y se debe obviar. (No se porque aparece en la base de datos de ellos)  | *3. La cadena(en un 95% de las veces) puede finalizar en "\n". Eso no pertenece al cifrado y se debe obviar. (No se porque aparece en la base de datos de ellos)  | ||
Revisión del 15:26 19 dic 2014
Contenido
Definición
Un subsistema de AGORA@US para mostrar las opciones de la votación donde el votante pueda realizar la votación. El voto tiene que cifrarse en cliente, nunca debe llegar al servidor el voto en claro. A la cabina sólo podrán llegar usuarios autenticados que aún no hayan votado. El voto se enviará cifrado al almacenamiento de votos
Miembros
- Francisco Javier Aguadero García: Gestor de la configuración
 - Alfonso Alcántara López: Gestor de la configuración
 - José Ignacio Algarín Rodríguez: Gestor de la configuración
 - Carlos Borja García-Baquero: Gestor de la configuración
 - José Javier Delgado Cuder: Gestor de la configuración
 - David Jiménez Vargas: Gestor de la configuración
 - Juan Elias Maireles Osuna: Jefe de proyecto
 - David Miñon Saborido: Gestor de la configuración
 - Lara Rodríguez Ternero: Gestor de la configuración
 
Iteraciones
- Taller de creación de grupos (29/09/14)
 - Taller de arquitectura de la aplicación (01/10/14)
 - Taller de gestión de código (1) (06/10/14)
 - Taller de gestión de código (2) (08/10/14)
 - Taller de herramientas de análisis (15/10/2014)
 - Taller de gestión del código (3) (27/10/2014)
 
Subsistemas relacionados
Para que el subsistema de Almacenamiento de votos, pueda obtener dicho voto, le mandaremos un JSON con la siguiente estructura:
{
  "age": "24",
  "answers": [
       {
          "question":"Pregunta 1", 
          "answer_question":"SI"
       },
       {
          "question":"Pregunta 2",
          "answer_question":"SI"
       }        
  ], 
  "id": 1, 
  "autonomous_community": "Andalucia", 
  "genre": "Masculino", 
  "id_poll": 32778
} 
Para que el subsistema de Creación/Administración de Censos puedan comunicarse con nuestro subsistema, la URI que debe poner en el botón o enlace para que salga la cabina de votación es la siguiente:
http://localhost:8000/cabinaus/id_votacion/
Donde id_votacion siempre debe ser un número, por ejemplo:
http://localhost:8000/cabinaus/15/
ACLARACIONES RSA
Como ya se ha avisado, el cifrado-descifrado de RSA tanto en Python como en Java ya funcionan y el voto es guardado cifrado. El formato que tiene al guardarse en la base de dato de almacenamiento es:
{"votes":["J9mbVwCRkeIGewJTPyZ7ZYxDJ7GsFO.........vERJUZlc0v3eF02M0WtKxEypWA==\n"],"msg":1}
(Ejemplo real, [1])
¡Advertencias!
- 1. La cadena esta codificada en BASE64
 - 2. La cadena puede contener "\n" y en java puede dar problemas. Esos caracteres SÍ son necesarios.
 - 3. La cadena(en un 95% de las veces) puede finalizar en "\n". Eso no pertenece al cifrado y se debe obviar. (No se porque aparece en la base de datos de ellos)
 
Descifrado con JAVA
BASE64Decoder decoder = new BASE64Decoder();
String textoCon64 = "textoDeLaBD";
byte[] bytesDecode = decoder.decodeBuffer(textoCon64);
String textoNormal = auth.decrypt(bytesDecode, keyPrivate);
System.out.println("descifrado es: " + textoNormal);
(No tomarselo al pie de la letra el código pues esta basado en muchas modificaciones del .jar de verificación que he ido realizando, pero FUNCIONA) (Este código no contempla los puntos 2 y 3 mencionados anteriormente)
Instalación del subsistema
Probado en Windows 7 SP1 x64 (imagen de DreamSpark disponible en la web de la escuela). Para otros sistemas el procedimiento es el mismo.
Probado en Windows 8 (x64 y x32) y 8.1 (x64 y x32)
- 1. Instalar Python 2.7.7 (link)
 - 2. Instalar Setuptools (link) teniendo en cuenta python 2.7.7 y 64 o 32 bits
 - 3. Ir a la ruta de instalación de scripts python (por defecto: C:\Python27\Scripts) desde el cmd y ejecutar:
 
easy_install pip pip install Django==1.4.7 pip install djangorestframework==2.4.3 pip install rsa==3.1.4 pip install django-cors-headers==0.13 pip install requests==2.5.0
- 4. Ir a la carpeta donde esté el proyecto por cmd y ejecutar: manage.py runserver
 - 5. Abrir el navegador en 127.0.0.1:8000
 
Instalación del subsistema en Ubuntu
1.- Crear carpeta llamada cabina-integracion
mkdir cabina-integracion
2.- Descargar los scripts para Linux: 
3.- Mover los scripts descargados a la carpeta cabina-integracion, creada en el punto 1
4.- Dar permisos de ejecución a los scripts:
chmod +x *.sh
5.- Copiamos dentro de la carpeta cabina-integracion la última versión de cabina cabina-agora-us. La estructura que va a tener la carpeta cabina-integracion es la siguiente:
cabina-integracion | |- cabina-agora-us |- install.sh |- run.sh
6.- Ejecutar scripts:
./install.sh
./run.sh
El primer script (install.sh) instala y arranca el proyecto. El segundo (run.sh) solo lo arranca. Por tanto la primera vez que ejecutéis el proyecto después de descargarlo ejecutad el script install.sh, y el resto de las veces el run.sh
NOTA: Tras la ejecución de cada script, saldrá el siguiente mensaje: ================= OK ===================. Cuando ejecutamos el primer script para pararlo tecleamos CTRL+C, pero no paramos el segundo.