codigo Cesar y Rsa


Despues del "OSO" de Luis de este domingo y esperando q no se repita.
les dejo ak el codigo de rsa q no se porq no se puede descargar de box.net les dejo aka las formulas q se utilizan:

2. El algoritmo RSA
El algoritmo RSA funciona de la siguiente manera:

1. Inicialmente es necesario generar aleatoriamente dos números primos grandes, a los que llamaremos p y q.

2. A continuación calcularemos n como producto de p y q: n = p * q

3. Se calcula fi: fi(n)=(p-1)(q-1)

4. Se calcula un número natural e de manera que MCD(e, fi(n))=1 , es decir e debe ser primo relativo de fi(n).
Es lo mismo que buscar un numero impar por el que dividir fi(n) que de cero como resto.

5. Mediante el algoritmo extendido de Euclides se calcula d: e.d mod fi(n)=1 Puede calcularse d=((Y*fi(n))+1)/e para Y=1,2,3,... hasta encontrar un d entero.

6. El par de números (e,n) son la clave pública.

7. El par de números (d,n) son la clave privada.

8. Cifrado: La función de cifrado es C = M^e mod n

9. Descifrado: La función de descifrado es M = C^d mod n

3. Ejemplo con números pequeños.

1. Escogemos dos números primos, por ejemplo p=3 y q=11.

2. n = 3 * 11 = 33.

3. fi(n) = (3-1) * (11-1) = 20.

4. Buscamos e: 20/1=0, 20/3=6.67. e=3.

5. Calculamos d como el inverso multiplicativo módulo z de e, por ejemplo, sustituyendo Y por 1,2,3,... hasta que se obtenga un valor entero en la expresión: d = ((Y * fi(n)) + 1) / e = ( Y * 20 + 1) / 3 = 21 / 3 = 7

6. e=3 y n=33 son la clave pública.

7. d=7 y n=33 son la clave privada.

8. Cifrado: Mensaje = 5, C = M^e mod n = 5^3 mod 33 = 26

9. Descifrado: M = C^d mod n = 26^7 mod 33 = 8031810176 mod 33 = 5


Y bueno espero q no s eles complique mucho ya con l algoritmo y con las explicaciones de el post anterior de Rsa no deverian tener muchos problemas.
aka el video de cesar te servira de mucho para poder realizar el cifrado:

BIgInteger y no BigDecimal


Saludos como estamos supongo q haciendo tarea xD bueno solo para comentar q la semana pasada el Doc Luis nos dijo q es necesario en el programa utilizar Bigdecimal para poder realizarlo pero al aparecer se confundió ya q no es bigdecimal lo q tenemos q utilizar sino ”BIGINTEGER” lo malo de esto es q este objeto al igual q bigdecimal se manejan de una manera la cual no estamos nada acostumbrados.
Primero aka dejo lo q me paso el domingo aki vienen las ecuaciones q podemos utilizar para ahcer el metodo de rsa


Y me costó mucho entender su funcionamiento y aka les dejo un escrito q me ayuda bastante a entenderlo. :

Tenemos un programa “Calc” con el que empezamos con un montante de 100.05$, y nos dan un 10% de descuento antes de aplicarnos un 5% de impuestos los jodíos. Para ver el resultado, el pogramita usa la clase NumberFormat para formatear el resultado para mostrar el dinerito.

import java.text.NumberFormat;

public class Calc {
public static void main(String args[]) {
double amount = 100.05;
double discount = amount * 0.10;
double total = amount - discount;
double tax = total * 0.05;
double taxedTotal = tax + total;
NumberFormat money = NumberFormat.getCurrencyInstance();
System.out.println("Subtotal : "+ money.format(amount));
System.out.println("Discount : " + money.format(discount));
System.out.println("Total : " + money.format(total));
System.out.println("Tax : " + money.format(tax));
System.out.println("Tax+Total: " + money.format(taxedTotal));
}
}

Como usamos el tipo double para todos los cálculos internos, tenemos los siguientes resultados:

Subtotal : $100.05
Discount : $10.00
Total : $90.04
Tax : $4.50
Tax+Total: $94.55

El valor Total es lo que se espera, pero Tax+Total parece que es más de lo que toca(¡¡¡malditos impuestos!!!). Para que el Total nos dé lo que nos da(90.04$), el descuento debería ser de 10.01$ y no 10.00$. O sea, que perdemos 0.01$ por errores de redondeo. Aquí están los valores sin formatear:

Subtotal : 100.05
Discount : 10.005
Total : 90.045
Tax : 4.50225
Tax+Total: 94.54725

¿Por qué el 90.045 se redondea a 90.04 y no a 90.05, como tiene que ser? Pues por RoundingMode, un enumeration de Java SE 6 que controla el redondeo. El NumberFormat para las cantidades monetarias está en modo HALF_EVEN por defecto, con lo que si el valor a redondear es equidistante se redondea hacia el valor par (4) y no al valor correcto en este caso (5).

Los otros modos de RoundingMode:

* CEILING redondea hacia arriba
* DOWN redondea hacia el zero
* FLOOR redondea hacia abajo
* UP redondea alejándose del zero
* HALF_DOWN redondea al más cercano, per en caso de equidistancia se va hacia abajo
* HALF_UP igual que el anterior, pero en caso de equidistancia se va para arriba
* UNNECESSARY sin redondeo

Antes de intentar corregir el tema, vamos a hacer otra prueba pero con 0.70$ y sin descuentos.

Total : $0.70
Tax : $0.03
Tax+Total: $0.74

En este caso no es sólo un error de redondeo. Vamos a ver los valores sin formatear:

Total : 0.7
Tax : 0.034999999999999996
Tax+Total: 0.735

El valor de los impuestos simplemente no se puede almacenar en un double. No tiene representación en binario.

La clase BigDecimal ayuda a resolver problemas como estos. BigDecimal guarda números en coma flotante con una precisión prácticamente ilimitada. Y para manipular el dato hay que usar las operaciones add(value), subtract(value), multiply(value), o divide(value, scale, roundingMode).

Para sacar un valor de un BigDecimal, hay que poner una escala y un modo de redondeo con setScale(scale, roundingMode), o usar los métodos toString() o toPlainString(). El método toString() puede usar notación cientifica mientras que toPlainString() no.

Antes de transformar el programita para usar la clase BigDecimal, hay que ver como se crea un objeto de esos. Hay 16 constructores del ala para la clase de marras. Puesto que es posible no poder guardar el valor de un BigDecimal en un objeto primitivo como un double, es mejor crear un BigDecimal desde un String. Para demostrar este error, aquí tienes un ejemplillo bien simple:

double dd = .35;
BigDecimal d = new BigDecimal(dd);
System.out.println(".35 = " + d);

La salida no es lo que habrías esperado:

.35 = 0.34999999999999997779553950749686919152736663818359375

En su lugar, lo que hay que hace es crear el BigDecimal con el string “.35″:

BigDecimal d = new BigDecimal(".35");

lo que nos da la siguiente salida (que mola más):

.35 = 0.35

Una vez creado el objeto, puedes asignarle una escala y su modo de redondeo con setScale(). Ojo, que el BigDecimal es inmutable, por lo que tendrás que guardar el resultado de la operación:

d = d.setScale(2, RoundingMode.HALF_UP);

A continuación el programa modificado. Nos aseguramos que las operaciones rulan bien para los dólares estableciendo la correcta escala.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Calc2 {

public static void main(String args[]) {
BigDecimal amount = new BigDecimal("100.05");
BigDecimal discountPercent = new BigDecimal("0.10");
BigDecimal discount = amount.multiply(discountPercent);
discount = discount.setScale(2, RoundingMode.HALF_UP);
BigDecimal total = amount.subtract(discount);
total = total.setScale(2, RoundingMode.HALF_UP);
BigDecimal taxPercent = new BigDecimal("0.05");
BigDecimal tax = total.multiply(taxPercent);
tax = tax.setScale(2, RoundingMode.HALF_UP);
BigDecimal taxedTotal = total.add(tax);
taxedTotal = taxedTotal.setScale(2, RoundingMode.HALF_UP);
System.out.println("Subtotal : " + amount);
System.out.println("Discount : " + discount);
System.out.println("Total : " + total);
System.out.println("Tax : " + tax);
System.out.println("Tax+Total: " + taxedTotal);
}
}

Fíjate que no usamos NumberFormat, aunque lo podemos usar si vamos a sacar el símbolo de la moneda.

Ahora los resultados parece que cuadran:

Subtotal : 100.05
Discount : 10.01
Total : 90.04
Tax : 4.50
Tax+Total: 94.54

BigDecimal da mucho más de sí, pero para empezar ya está bien. También tenemos la clase BigInteger para cuando queramos precisión total con números enteros. Si quereis más info, ya sabéis, a la documentación de la API de Java.


bueno este manual me ayudo bastante a entender q onda con los biginteger y aka les dejo el como se realizan las operaciones logicas con este objeto:
BigInteger obj= BigInteger.valueOf(1);//creamos un biginteger con valor 1
obj=obj.add(BigInteger.valueOf(1));//sumamos obj +1
obj=obj.subtract(BigInteger.valueOf(1));//restamos obj -1
obj=obj.multiply(BigInteger.valueOf(1));//multiplicamos obj *1
obj=obj.divide(BigInteger.valueOf(1));////dividimos obj /1
obj=obj.pow(2);//elevamos obj a la 2
double dob=obj.doubleValue();//asignamos el valor de obj a una variable double
int entero=obj.intValue();//asignamos el valor de obj a una variable entera


creo q esto es todo para poder hacer el programa.
suerte.

Diapositivas Zenen 00

Saludos compañeros les paso las diapositivas q me dio el doctor Zenen la semana pasada pido disculpas por no postear antes oks.

exposiciones redes 04

okis aki los archivos de la exposicion de hoy domingo ..
( las subo hoy pa q no me regañen xD )

exposiciones:

aki en video de RSDI:

y aki lo que vimos de "" SUBNETING ""

Expos de la semana pasada


y el video:

Noticia: NEW HOMEWORK :(

Si lo se ... yo también taba muy contento creyendo q el Prof. no había dejado tarea pero ...
Q CREEN ?
recibí un correo y bueno me comento q para q practicáramos los aprendido en al ultima clase nos dejaba un pequeño ejercicio no muy difícil es muy similar al q realizamos en clase y se le entregara la próxima clase.

AKI LAS ESPECIFICACIONES:


ENRUTAMIENTO ESTATICO (RIP) EN PT

En el gráfico pueden ver la topología a implementar. La finalidad de ejercicio es que se pueda enrutar tráfico entre las redes 192.168.1.0/24, 192.168.2.0/24 y 192.168.3.0/24 sin ningún protocolo de enrutamiento, usando solo rutas estáticas.



recomiendo q realicemos esta semana la tarea por cualqueir comentario.

by FURTHUR

Cambio de congreso CONCAPAN por ROOPEC 2009

Saludos compañeros.
para el congreso q comento el doctor CONCAPAN No sera posible ir :(
Esto devido a pasado la fecha para la recepción de trabajos.

aun asi me comento que podriamos ir a ROOPEC 2009 con sede en Michoacan, y claro aun esta en pie su propuesta para unirse a su proyecto.