Estamos migrando de sistemas de foros, por favor repórtanos cualquier problema a [email protected], si te llega a tu bandeja de entrada o a spam un correo que te dice que se solicitó el cambio de contraseña, no te alarmes, es un procedimiento normal de la migración, cambia tu contraseña porque no hay compatibilidad en el sistema de cifrado del viejo sistema con el sistema nuevo, por eso debes resetear tu clave con ese enlace.

ROT13

editado diciembre 2008 en Criptografía
HOla siempre me a interesado la criptografia, pero siempre esta muy vacio esta seccion.
Yo no se criptografia ni nada por el estilo, pero se me hace muy interesante

Les voy a explicar como funciona el metodo de ROT13, Muchos alomejor ya lo conocen y creeran que es muy basico, pero por algo se empieza. Y otros talvez diran que esto no es cifrar, pero aun asi lo voy a explicar, siempre es bueno saber hasta lo mas basico y las raices

La tecnica de ROT13 es muy facil, consiste en sumarle 13 letras a una letra

ej: A = a+13(b+c+d+e+f+g+h+i+j+k+l+m+N) = N
b= b+13(c+d+e+f+g+h+i+j+k+l+m+nO) = O

bueno aqui hay unas cosas hasta la M se le puede sumar 13. Pero ¿que pasa cuando llegamos a la N, O,Z???
bueno pss simplemente vamos de reversa

la lista seria asi;

A B C D E F G H I J K L M
| | | | | | | | | | | | |
N O P Q R S T U V W X Y Z


etc... Asi quE si kiero escribir "dragonjar" esto seria igual a = qentbawne

Como pudiste notar las letras son del abecedario en ingles no en español, por lo que se omite la (Ñ, Ch, LL)

Bueno aqui les dejo una pagina que traduce el ROT13 automaticamente

ROT13


Saludos y ojala les haya gustado ;)

Comentarios

  • Hola que bueno que comiences por la historia de la Criptografia, te recomiendo el tema de cifrarios de substitución como los son :
    • El ATBaSH hebreo
    • cifrarios monoalfabético utilizado en el Kamasutra :P
    • cifrado de masón
    • uso de homófonas y nulas
    • el nomenclator de María estuardo
    • The babington plot
    • Cifrario de Vigenere (charles babbage)
    • cifrarios de autoclave
    • cifrario one-time pad
    • la scitala espartana
    • trasposición multi-columnar
    • la maquina eneigma de la segunda guerar mundial "te la recomiendo tema super interesante"

    Espero esto sea de ayuda para todos :)
  • editado 3:01
    javieralbarra escribió :
    Hola que bueno que comiences por la historia de la Criptografia, te recomiendo el tema de cifrarios de substitución como los son :
    • El ATBaSH hebreo
    • cifrarios monoalfabético utilizado en el Kamasutra :P
    • cifrado de masón
    • uso de homófonas y nulas
    • el nomenclator de María estuardo
    • The babington plot
    • Cifrario de Vigenere (charles babbage)
    • cifrarios de autoclave
    • cifrario one-time pad
    • la scitala espartana
    • trasposición multi-columnar
    • la maquina eneigma de la segunda guerar mundial "te la recomiendo tema super interesante"

    Espero esto sea de ayuda para todos :)

    Muchas Gracias por las recomendaciones, ire investigando cada una y si le entiendo, pues voy posteando de que se trata cada una de ella.

    Y si tu ya las conoces, podrias ayudarnos, poniendo y explicando lo que sabes.
    la maquina eneigma de la segunda guerar mundial "te la recomiendo tema super interesante"
    Hasta donde tengo entendido es enigma no??? O es otra esa
  • editado 3:01
    entonces,

    ya que hablan de la maquina enigma les dejo un simulador que me encontré http://enigmaco.de/enigma/enigma.swf


    saludos..
  • Jeje esa vaina enigma :P claro con gusto podria ayudar pero el tema de permutaciones es mas para saber de donde viene la Criptografia como quien dice Historia :) pero si en lo que pueda colaboro.
  • editado 3:01
    ya que estan con la criptologia(mi tema favorito :) ) les dejo algo basico...

    que pena el copy paste pero me dio hartera reestructurar el post..si quieren el original pues esta en mi foro..HL..

    Morse

    estaba aburrido porque estaba instalando un servidor debian(ustedes saben ese aptitud si que demora :p) y pues vi un libro que tenía la tabla de caracteres(Si el deitel(hormiguitas !!)) y me dije a mi mismo

    Mi Mismo: haz un programa de codificación morse y pues acá esta xDD

    usa / como separador de palabras y un espacio como separador de letra :P
    import java.util.*;
    	public class morse{
    	public static String alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
    	public static String morsa[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--",
    	"-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","--..",".----","..---",
    	"...--","....-",".....","-....","--...","---..","----..","-----"};
    	public static void main(String args[]){
    	try{
    	if(args[0].equals("-c") || args[0].equals("-C")){
    	System.out.println("---------codificar--------");
    	String temp="",temp2="";
    	for(int n = 0; n < args[1].length();n++){
    	temp = String.valueOf(args[1].charAt(n)).toLowerCase();
    	if(alfa.indexOf(temp) != -1){
    	temp2 += morsa[alfa.indexOf(temp)] + " ";
    	}else{
    	if(temp.equals(" ")){
    	temp2 += " / ";
    	}else{
    	temp2 += temp +" ";
    	}
    	}
    	}
    	System.out.println(temp2);
    	}else if(args[0].equals("-d") || args[0].equals("-D")){
    	String temp2 = "";
    	System.out.println("--------decodificar-------");
    	StringTokenizer tempo = new StringTokenizer(args[1]);
    	while(tempo.hasMoreTokens()){
    	String hola = String.valueOf(tempo.nextToken());
    	if(search(hola) != -1){
    	temp2+= String.valueOf(alfa.charAt(search(hola)));
    	}else{
    	if(hola.equals("/")){
    	temp2 += " ";
    	}else{
    	temp2 += hola;
    	}
    	}
    	}
    	System.out.println(temp2);
    	}else{
    	error();
    	}
    	}catch(Exception c){
    	error();
    	}
    	}
    	public static void error(){
    	System.out.println("Lo Usas Mal :P n se usa asi:n java morse <opcion> <texto en comilas>");
    	System.out.println("<OPCION> n n -d t para decodificar el texto n -c para codificar el texto nn By Phicar :P");
    	}
    	public static int search(String a){
    	for(int n = 0;n < morsa.length;n++){
    	if(morsa[n].equals(a)){return n;}
    	}
    	return -1;
    	}
    	}
    

    Base 64

    Bueno, acá mudandome, ahí vi el base64 en vb que era una boleta, acá les traigo los métodos que uso, junto con el conversor de base 2 a 10 y 10 a 2 ya que no quería usar Integer.parseInt(*,base) ni String.valueOf(*,base)

    así que no chimbeen con lo de reinventar la rueda, así es que estudio los algoritmos gayers :P

    Codificación
    	public static String basecod(String a){
    	String bin = "";
    	String res = "";
    	for(int n = 0;n<a.length();n++){
    	bin += DecToBin((int)a.charAt(n),8);
    	}
    	for(int z = 0;z<bin.length();z+=6){
    	res += alfa.charAt(BinToDec(bin.substring(z,z+6)));
    	}
    	return res;
    	}
    
    Decodificación
    public static String basedec(String a){
    	String res = "",bin="";
    	for(int n = 0;n<a.length();n++){
    	bin+= DecToBin(alfa.indexOf(a.charAt(n)),6);
    	}
    	for(int w =0;w<bin.length();w+=8){
    	res += (char)(BinToDec(bin.substring(w,w+8)));
    	}
    	return res;
    	}
    

    Métodos que usa
    public static String DecToBin(int a,int b){
    	String l="";
    	while(a>=1){
    	l = String.valueOf(a%2)+l;
    	a/=2;
    	}
    	while(l.length()%b != 0){
    	l = "0"+l;
    	}
    	return l;
    	}
    	public static int BinToDec(String a){
    	int temp = 0;
    	double po=0.0;
    	for(int n = a.length();n>=1;n--){
    	temp += ((int)(Math.pow(2.0,po))) * Integer.parseInt(a.substring(n-1,n));
    	po+=1.0;
    	}
    	return temp;
    	}
    


    usa también el charset que sería público en la clase donde pongan los métodos
    public static String alfa = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    


    Suerte locos


    XeCript

    XeCript es un cifrado que funciona con los ascii y el cual alguna vez deje un reto en muriba y nada que llegan respuestas xDDDD

    ehh se me olvidaba, para los que pensaban que nunca iba a usar nombres coherentes a mis variables, pues pillate el siguiente código :)

    disfrutenlo :P
    import java.util.*;
    	import java.io.*;
    	public class XeCript{
    	public static void main(String args&#91;]){
    	try{
    	BufferedReader lector = new BufferedReader(new FileReader(args[1]));
    	String clave = args[2];
    	String texto = "",stream = lector.readLine();
    	while(stream != null){
    	texto += stream;
    	stream = lector.readLine();
    	}
    	if(args[0].equals("-d") || args[0].equals("-D")){
    	System.out.println(desc(texto,clave));
    	}else if(args[0].equals("-c")|| args[0].equals("-C")){
    	System.out.println(cod(texto,clave));
    	}else{
    	perror();
    	}
    	}catch(Exception Phicar){
    	perror();
    	}
    	}
    	public static String desc(String txt,String pass){
    	StringTokenizer tokens = new StringTokenizer(txt,".");
    	String des = "";
    	int SumClave = 0;
    	for(int n = 0;n< pass.length();n++)
    	SumClave += (int)pass.charAt(n);
    	while(tokens.hasMoreTokens()){
    	int tmp = Integer.parseInt(tokens.nextToken());
    	int tmp2 = Integer.parseInt(tokens.nextToken());
    	int tmp3 = Integer.parseInt(tokens.nextToken());
    	des += (char)((tmp+tmp2+tmp3)-SumClave);
    	}
    	return des;
    	}
    	public static String cod(String txt,String pass){
    	String cifra = "";
    	int SumClave = 0,tmp=0,tmp2=0,tmp3=0,semilla = 0;
    	for(int a = 0;a<pass.length();a++)
    	SumClave += (int)pass.charAt(a);
    	for(int n = 0;n < txt.length();n++){
    	semilla = ((int)txt.charAt(n))+SumClave;
    	tmp = 1+((int)(Math.random()*semilla));
    	tmp2 = 1+((int)(Math.random()*semilla));
    	tmp3 = semilla-(tmp+tmp2);
    	cifra += "."+String.valueOf(tmp)+"."+String.valueOf(tmp2)+"."+String.valueOf(tmp3);
    	}
    	return cifra;
    	}
    	public static void perror(){
    	System.err.println("Lo Usaste Malnjava XeCript <opcion> <archivo> <clave>n Opcion:n-d -DtDescifrar XeCriptn-c -Ct Cifrar XeCriptn By Phicar <RiC>");
    	}
    	}
    

    pd si necesitan que lo comente pa entenderlo, me dicen(soy vago you know)

    PlayFair

    Sigo posteando algoritmos
    /*PlayFair By Phicar
    	reglas:
    	Si en el bloque las dos letras son la misma, se reemplaza la segunda generalmente por una X (o alguna letra poco frecuente) y se encripta el nuevo par.
    	Si las dos letras del bloque aparecen en la misma fila de la tabla, cada una se reemplaza por la letra adyacente que se encuentra a su derecha (si es la letra que se encuentra en la última posición a la derecha de la fila se la reemplaza con la primera de la izquierda de esa fila). Ej. SM se reemplazará por EA y AE por OM.
    	Si las dos letras del bloque aparecen en la misma columna de la tabla, cada una se reemplaza por la letra adyacente que se encuentra por debajo (si es la letra que se encuentra en la última posición inferior de la columna se la reemplaza con la primera de arriba de esa columna). Ej. LC se reemplazará por GO y GQ por QC.
    	Si las letras no se encuentran en la misma fila ni columna se las reemplaza se determina el rectángulo formado por los dos caracteres y se encripta tomando los caracteres que están en las esquinas del rectángulo y en la misma fila que el carácter a encriptar. Ej. SB se reemplazará por MY y KR por HP.
    	
    	[email][email protected][/email]
    	*/
    	import java.io.*;
    	import java.util.*;
    	public class playfair{
    	public static void main(String args&#91;]) throws IOException{
    	if(args.length < 3){
    	error();
    	return;
    	}
    	StringTokenizer clave = new StringTokenizer(args[2].toLowerCase());
    	String pass = "";
    	while(clave.hasMoreTokens()){
    	pass+=clave.nextToken();
    	}
    	if(args[0].equals("-C") || args[0].equals("-c")){
    	System.out.println(play(new StringTokenizer(args[1].toLowerCase()+":"+pass,":")));
    	}else if(args[0].equals("-d") || args[0].equals("-D")){
    	if(args[1].length() % 2 != 0){
    	System.err.println("Error en el codetext..");
    	return;
    	}
    	
    	System.out.println(fair(new StringTokenizer(args[1].toLowerCase()+":"+pass,":")));
    	}else
    	error();
    	}
    	public static String fair(StringTokenizer token){
    	String text = token.nextToken();
    	String temp = "",tem = "";
    	String alfa&#91;] = MkAlfa(token.nextToken());
    	for(int n = 0;n<text.length();n+=2){
    	tem = text.substring(n,n+2);
    	if(PosX(String.valueOf(tem.charAt(0)),alfa) ==PosX(String.valueOf(tem.charAt(1)),alfa)){
    	int x = PosX(String.valueOf(tem.charAt(0)),alfa);
    	int epa = (((alfa[x].indexOf(tem.charAt(0)))-1)>=0)?((alfa[x].indexOf(tem.charAt(0)))-1):(alfa[x].length())+((alfa[x].indexOf(tem.charAt(0)))-1);
    	int epo = (((alfa[x].indexOf(tem.charAt(1)))-1)>=0)?((alfa[x].indexOf(tem.charAt(1)))-1):(alfa[x].length())+((alfa[x].indexOf(tem.charAt(1)))-1);
    	temp += String.valueOf(alfa[x].charAt(epa))+String.valueOf(alfa[x].charAt(epo));
    	}
    	if(PosY(String.valueOf(tem.charAt(0)),alfa) ==PosY(String.valueOf(tem.charAt(1)),alfa)){
    	int y = PosY(String.valueOf(tem.charAt(0)),alfa);
    	int epa = (((PosX(String.valueOf(tem.charAt(0)),alfa))-1)>=0)?((PosX(String.valueOf(tem.charAt(0)),alfa))-1):alfa.length+((PosX(String.valueOf(tem.charAt(0)),alfa))-1);
    	int epo = (((PosX(String.valueOf(tem.charAt(1)),alfa))-1)>=0)?((PosX(String.valueOf(tem.charAt(1)),alfa))-1):alfa.length+((PosX(String.valueOf(tem.charAt(1)),alfa))-1);
    	temp += String.valueOf(alfa[epa].charAt(PosY(String.valueOf(tem.charAt(0)),alfa)))+String.valueOf(alfa[epo].charAt(PosY(String.valueOf(tem.charAt(0)),alfa)));
    	}
    	if((PosY(String.valueOf(tem.charAt(0)),alfa) !=PosY(String.valueOf(tem.charAt(1)),alfa)) && (PosX(String.valueOf(tem.charAt(0)),alfa) !=PosX(String.valueOf(tem.charAt(1)),alfa))){
    	temp += String.valueOf(alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].charAt(PosY(String.valueOf(tem.charAt(1)),alfa)))+String.valueOf(alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].charAt(PosY(String.valueOf(tem.charAt(0)),alfa)));
    	}
    	}
    	return temp;
    	}
    	public static String play(StringTokenizer token){
    	String text = token.nextToken();
    	String clave = token.nextToken();
    	String alfa&#91;] = MkAlfa(clave);
    	String tem = "",temp = "",texto="",tex="";
    	StringTokenizer fockens = new StringTokenizer(text);
    	while(fockens.hasMoreTokens()){
    	tex += fockens.nextToken();
    	}
    	for(int n = 0;n<tex.length();n++){
    	if(PosX(String.valueOf(tex.charAt(n)),alfa) != -1)
    	texto += String.valueOf(tex.charAt(n));
    	}
    	if(texto.length()%2 != 0)
    	texto += "x";
    	for(int n = 0;n < texto.length();n+=2){
    	tem = texto.substring(n,n+2);
    	if(tem.charAt(0) == tem.charAt(1)){//regla 1, si son iguales cambie a x
    	tem = tem.substring(0,1)+"x";
    	}
    	//regla posición derecha
    	if(PosX(String.valueOf(tem.charAt(0)),alfa) == PosX(String.valueOf(tem.charAt(1)),alfa)){
    	int epa = (alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].indexOf(String.valueOf(tem.charAt(0))));
    	int epo = (alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].indexOf(String.valueOf(tem.charAt(1))));
    	temp += alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].charAt(((epa+1)>=alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].length())?(alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].length())-(epa+1):epa+1);
    	temp += alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].charAt(((epo+1)>=alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].length())?(alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].length())-(epo+1):epo+1);
    	}
    	//regla posición abajo
    	if(PosY(String.valueOf(tem.charAt(0)),alfa) == PosY(String.valueOf(tem.charAt(1)),alfa)){
    	int epa = ((PosX(String.valueOf(tem.charAt(0)),alfa)+1)>=alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].length())?(((PosX(String.valueOf(tem.charAt(0)),alfa)+1))-(alfa.length)):(PosX(String.valueOf(tem.charAt(0)),alfa)+1);
    	int epo = ((PosX(String.valueOf(tem.charAt(1)),alfa)+1)>=alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].length())?(((PosX(String.valueOf(tem.charAt(1)),alfa)+1))-(alfa.length)):(PosX(String.valueOf(tem.charAt(1)),alfa)+1);
    	temp += alfa[epa].charAt(PosY(String.valueOf(tem.charAt(0)),alfa));
    	temp += alfa[epo].charAt(PosY(String.valueOf(tem.charAt(1)),alfa));
    	}
    	if((PosY(String.valueOf(tem.charAt(0)),alfa) != PosY(String.valueOf(tem.charAt(1)),alfa)) &&(PosX(String.valueOf(tem.charAt(0)),alfa) != PosX(String.valueOf(tem.charAt(1)),alfa))){
    	//úlltima regla
    	temp += alfa[PosX(String.valueOf(tem.charAt(0)),alfa)].charAt(PosY(String.valueOf(tem.charAt(1)),alfa));
    	temp += alfa[PosX(String.valueOf(tem.charAt(1)),alfa)].charAt(PosY(String.valueOf(tem.charAt(0)),alfa));
    	}
    	//System.out.println(tem);
    	}
    	
    	return temp;
    	}
    	public static String&#91;] MkAlfa(String b){
    	String alfabeto = "abcdefghiklmnopqrstuvwxyz";
    	String tem = "",temp = "",a = "";
    	for(int n = 0;n<b.length();n++)
    	a += (String.valueOf(b.charAt(n)).equals("j"))?"":String.valueOf(b.charAt(n));
    	for(int n = 0;n < a.length();n++){
    	if(tem.indexOf(String.valueOf(a.charAt(n)).toLowerCase()) == -1)
    	tem += String.valueOf(a.charAt(n)).toLowerCase();
    	}
    	for(int n = 0;n < alfabeto.length();n++){
    	if(tem.indexOf(String.valueOf(alfabeto.charAt(n))) == -1)
    	tem += String.valueOf(alfabeto.charAt(n));
    	}
    	for(int n = 0;n<tem.length();n+=5){
    	temp += tem.substring(n,n+5)+",";
    	}
    	//System.out.println(temp.substring(0,temp.length()-1));
    	return temp.substring(0,temp.length()-1).split(",");
    	}
    	public static int PosX(String a,String ma&#91;]){
    	for(int n = 0;n<ma.length;n++){
    	if(ma[n].indexOf(a) != -1)
    	return n;
    	}
    	return -1;
    	}
    	public static int PosY(String a,String ma&#91;]){
    	for(int n = 0;n<ma.length;n++){
    	if(ma[n].indexOf(a) != -1)
    	return ma[n].indexOf(a);
    	}
    	return -1;
    	}
    	public static void error(){
    	System.out.println("Usage:Java playfair <option> <plain text> <password>nOptions:n-d or -D to decoden-c or -C to codenPhicar");
    	}
    	}
    

    explico un poquito

    primero pues está la parte del main que dice si se quiere codificar o decodificar..después ya entrando en materia todo se pasa a minúsculas(ya que el alfabeto funca en sólo minúsculas), después se procede...se crea la matríz con el método MkAlfa que devuelve una matríz de 5*5 con el órden de los caracteres..la password es la que genera el órden de la matríz...

    dentro de los métodos las cadenas(password,PlainText) se limpian y se dejan sin espacios y sin caracteres fuera dewl alfabeto :P, después se procede con las reglas del algoritmo..se cogen de a dos caracteres(si la longitud del PlainText no es par, entonces se pone una x de más)
    y se verifica que no sean iguales, si son iguales un caracter se cambia a 'x'

    ahora si se aplican las reglas
    Si en el bloque las dos letras son la misma, se reemplaza la segunda generalmente por una X (o alguna letra poco frecuente) y se encripta el nuevo par.
    Si las dos letras del bloque aparecen en la misma fila de la tabla, cada una se reemplaza por la letra adyacente que se encuentra a su derecha (si es la letra que se encuentra en la última posición a la derecha de la fila se la reemplaza con la primera de la izquierda de esa fila). Ej. SM se reemplazará por EA y AE por OM.
    Si las dos letras del bloque aparecen en la misma columna de la tabla, cada una se reemplaza por la letra adyacente que se encuentra por debajo (si es la letra que se encuentra en la última posición inferior de la columna se la reemplaza con la primera de arriba de esa columna). Ej. LC se reemplazará por GO y GQ por QC.
    Si las letras no se encuentran en la misma fila ni columna se las reemplaza se determina el rectángulo formado por los dos caracteres y se encripta tomando los caracteres que están en las esquinas del rectángulo y en la misma fila que el carácter a encriptar. Ej. SB se reemplazará por MY y KR por HP.Hola, sigo con la publicación de algoritmos :P

    Bibliografía
    http://www.textoscientificos.com/criptografia/playfair


    Vigenere


    Buenas, bueno estaba jugando y pues hice éste código(casi me da por el culo)...pero no domine la bestia xDDDDD

    bueno vigenere es una sustitución polialfabética basada en el cifrado del cesar(rot x) que alguna vez presente por acá

    el caso es que divide en bloques(tokens) y asigna ciclicamente una letra de la clave a cada letra del texto

    ejemplo:

    texto = Ric es una chimba :P
    pass = phicar

    Ric es una chimba
    phi ca rphi carphic

    lo que da como resultado la suma de los dos letras dentro de un alfabeto éstas se dividen sobre el número de letras del alfabeto(26(no use ñ)) y el residuo es el punto donde va a convertirse la letra

    lo que haría que

    Ric es una chimba
    phi ca rphi carphic

    generara

    Gpk gs lch kjidqh

    bueno el problema es que al descifrarlo si casi me da por el culo, pero dome la bestia como les dije antes xDDD, la verdad me llevo más de media hora con calculadora en mano y debugando mi código

    si al cifrar es (N + K) Mod T donde n es el caracter del texto plano, k es el de la clave y t es la longitud total de el alfabeto

    pa descifrar me toco hacer algo así

    x = 26 - |(N-K)%26| tal que (n-k) mod 26 sea menor a 0 si no entonces solo devuelve la resta :), mañas


    bueno ojalá me haya hecho entender acá ta el código pa que juzguen ustedes
    import java.util.*;
    	public class vigenere{
    	public static final String alfa = "abcdefghijklmnopqrstuvwxyz";
    	public static final String alfam = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	public static void main(String args&#91;]){
    	try{
    	StringTokenizer texto = new StringTokenizer(args[1]);
    	String clave = args[2].toLowerCase();
    	if(clave.length()==0 || texto.countTokens() == 0){
    	error();
    	return;
    	}
    	if(args[0].equals("-c") || args[0].equals("-C")){
    	
    	System.out.println(cif(texto,clave));
    	}else if(args[0].equals("-d") || args[0].equals("-D")){
    	System.out.println(desc(texto,clave));
    	}else{
    	error();
    	}
    	}catch(Exception phicar){
    	error();
    	//phicar.printStackTrace();
    	System.err.println("n"+phicar);
    	}
    	}
    	public static void error(){
    	System.out.println("Uso: java vigenere <opcion> <texto> <clave> n By Phicar <Ric>");
    	}
    	public static String desc(StringTokenizer a,String b){
    	String descifrado = "",token="";
    	int contador = 0;
    	while(a.hasMoreTokens()){
    	token = a.nextToken();
    	for(int n = 0;n < token.length();n++){
    	if(contador >= b.length())
    	contador = 0;
    	int p =0;
    	if(alfa.indexOf(token.charAt(n)) != -1){
    	descifrado += alfa.charAt(((p=((alfa.indexOf(token.charAt(n)))-(alfa.indexOf(b.charAt(contador))))%26)>=0)?p:26-(p*-1));
    	}else if(alfam.indexOf(token.charAt(n)) != -1){
    	double abs = Math.abs(Double.parseDouble(String.valueOf(alfam.indexOf(token.charAt(n))))) - Math.abs(Double.parseDouble(String.valueOf(alfa.indexOf(b.charAt(contador)))));
    	//System.out.println(alfam.indexOf(token.charAt(n))+"-"+alfa.indexOf(b.charAt(contador))+"--->%26---->"+ String.valueOf((abs > -1 && abs < 26)?abs:26+abs));
    	descifrado += alfam.charAt(((p=((alfam.indexOf(token.charAt(n)))-(alfa.indexOf(b.charAt(contador))))%26)>=0)?p:26-(p*-1));
    	}else{
    	descifrado += token.charAt(n);
    	}
    	contador++;
    	}
    	descifrado += " ";
    	}
    	return descifrado;
    	}
    	public static String cif(StringTokenizer a,String b){
    	String cifrado = "",token="";
    	int contador = 0;
    	while(a.hasMoreTokens()){
    	token = a.nextToken();
    	for(int n = 0;n < token.length();n++){
    	if(contador >= b.length())
    	contador = 0;
    	int p =0;
    	if(alfa.indexOf(token.charAt(n)) != -1){
    	cifrado += alfa.charAt(((p=((alfa.indexOf(token.charAt(n)))+(alfa.indexOf(b.charAt(contador))))%26)>0)?p:(p*-1));
    	}else if(alfam.indexOf(token.charAt(n)) != -1){
    	cifrado += alfam.charAt(((p=((alfam.indexOf(token.charAt(n)))+(alfa.indexOf(b.charAt(contador))))%26)>0)?p:(p*-1));
    	}else{
    	cifrado += token.charAt(n);
    	}
    	contador++;
    	}
    	cifrado += " ";
    	}
    	return cifrado;
    	}
    	}
    	
    
  • editado 3:01
    la criptografia es mi favorito y poco a poco comosco y reconosco el maravilloso mundo de la crIpto.... QUE LA INTERNET LOS BENDIGA ...amen(191/aps/±µ¥à¬¡à©®´¥²®¥´à¬¯³à¢¥®¤©§¡)
  • editado 3:01
    Bueno Bro, por lo que ves alguna vaina por poquito que sea se sobre criptografia, asi que si quieres hacer alguna cosa interesante no es mas que promuevas tu idea y sin duda alguna llevaria a cabo esa idea o proyecto contigo...Puros proyectos de juacking, toca hacer algo por este thread :)
  • editado 3:01
    Viejo estoy tratando de realizar el algortimo ROT47, solamente que hay un problem y es que debo anunciar todos los caracteres ASCII imprimibles, solamente eso ??jaja no se si haya q llamar alguna libreria en especial o q? pero bueno, viendo el codigo fuente anterior tengo una pregunta referente a esta linea y es "public static void main(String args[])" esta linea lo q significa es el llamado por codigo ASCII el caracter 91 o a q argumento se refiere??

    Ante mano muchas gracias parceroo y cualquier ayuda es bienvenida..

    Nos vemos:cool:
Accede o Regístrate para comentar.