Diferencia entre revisiones de «Grupo de Cabina de votación (2014-15)»
(→Instalación del subsistema) |
|||
| Línea 63: | Línea 63: | ||
http://localhost:8000/cabinaus/15/ | 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, [http://php-egc.rhcloud.com/get_votes.php?votation_id=998]) | ||
| + | |||
| + | == ¡Advertencias! == | ||
| + | *1. La cadena esta codificada en BASE64 | ||
| + | *2. La cadena puede contener "\n" y en java puede dar problemas, usar replaces de java. | ||
| + | *3. La cadena puede(en un 95%) finalizar en "\n". Eso no pertenece al cifrado y se deve 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, pero '''FUNCIONA''') | ||
| + | (Este código no contempla los puntos 2 y 3 mencionados anteriormente) | ||
| + | |||
== Instalación del subsistema == | == Instalación del subsistema == | ||
Revisión del 14:53 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, usar replaces de java.
- 3. La cadena puede(en un 95%) finalizar en "\n". Eso no pertenece al cifrado y se deve 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, 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.