Comunidad de diseño web y desarrollo en internet online

¿Cómo encriptar con clave pública un texto en Javascript?

Citar            
MensajeEscrito el 16 Sep 2013 12:01 pm
Hola a todos!! Necesitaría saber si alguien conoce algún tutorial/ejemplo en Javascript en el que dado una clave pública y un texto, lo encripte y devuelva el texto encriptado.

Muchas gracias!!

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Sep 2013 06:40 pm
algo así como guardarlo en una variable, y después devolver el contenido de la variable?

Por alejandroC

34 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Sep 2013 09:41 am
hice una funcion que encripta i desencripta string ya sea para enlaces o valores busca en uno de mis temas funcion enigma para javascript

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Sep 2013 09:53 am
por si no lo encontrases te envio codigo enigma que cree
enigma by aukun
a ver si te es util, los comandos se pueden emular a php facilmente de esta manera si creas una pagina html5/javascript desde php puedes utilizar la encriptacion desde php i la desencriptacion desde el javascript.
De todas formas los valores que pasan por url te aviso que mediante firefox-->herramientas-->desarrollo web-->consolaweb se puede llegar a encontrar cualquiera de esas variables.
Ahora estoy probando SSL para tener https en mi web en proteccion de datos, pero creo que tambien se puede llegar a saltar esa proteccion, i por tanto conocer los valores.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Sep 2013 03:11 pm
Te pongo un ejemplo de un sistema javascript que he creado:

Código HTML :

<!DOCTYPE html><html id=ihtml><head id=ihead><meta charset="utf-8"><script>

//gebi caught object by id 
function gebi(i){return document.getElementById(i);}
//function for svgo for make svg object (create svg object)
function sobj(i,t,p){var u='http://www.w3.org/2000/svg';var n=document.createElementNS(u,t);n.id=i;gebi(p).appendChild(n);}
//function for create svg object(put more attributes in svg object)
function svgo(i,y,p){sobj(i,'svg',p);sans(i,'xlink','http://www.w3.org/1999/xlink');sans(i,'viewBox','0 0 512 512');sans(i,'enable-background','new 0 0 512 512');sans(i,'title',y);}
//unsel unselect object by id
function unsel(i){var e=gebi(i);var s = e.style;s.userSelect = "none";s.webkitUserSelect = "none";s.MozUserSelect = "none";e.setAttribute("unselectable", "on");}
//create object put id-> i:String ; type of element(for exemple 'body' or 'div' or ...) -> t:String, id parent -> p:String
function obj(i,t,p){var n=document.createElement(t);n.id=i;gebi(p).appendChild(n);}
//efect alpha overmouse
function ef(i){var k=gebi(i);k.addEventListener("mouseover",function(){k.style.opacity=0.5;});k.addEventListener("mouseout",function(){k.style.opacity=1;});}
//create a box id->i:String;left->x:String;top->y:String;height->h:String;width->w:String
function kxa(i,x,y,h,w,c){var n = gebi(i);unsel(i);n.style.border="1px solid "+c;n.style.position="absolute";n.style.left=x+"px";n.style.top=y+"px";if(h=='auto'){n.style.height=h;}else{n.style.height=h+"px";}if(w=='auto'){n.style.height=w;}else{n.style.width=w+"px";}}
//create type of corners
function can(i,d,u,c,s){var k=gebi(i);k.style.borderRadius=d+"px "+u+"px "+c+"px "+s+"px";}
//efect drag function event
function drag(e2){function mou(e2){o.style.left=e2.pageX-x0+px+"px";o.style.top=e2.pageY-y0+py+"px";document.addEventListener("mouseup", upm, true);}function upm(e2){document.removeEventListener("mousemove", mou, true);document.removeEventListener("mouseup", upm, true);}o=document.getElementById(this.id);x0=e2.pageX;y0=e2.pageY;px=parseInt(o.style.left);py=parseInt(o.style.top);document.addEventListener("mousemove", mou, true);document.addEventListener("mouseup", upm, true);}
//svgp crea objeto svg path
function svgp(i,p,d,c){sobj(i+p,'path',p);sans(i+p,"fill",c);sans(i+p,"d",d);}
//sans add svg attribute id->i:String;svg type of attribute->t:String;value svg attribute->d:String
function sans(i,t,d){var e=gebi(i);e.setAttributeNS(null,t,d);}
//svgc crea objeto svg circle
function svgc(i,p,x,y,r,c){sobj(i+p,'circle',p);sans(i+p,"cx",x);sans(i+p,"cy",y);sans(i+p,"r",r);sans(i+p,"fill",c);} 
//create a link in a object id object->i:String; link->l:String
function link(i,l){gebi(i).onclick=function (){window.location.replace(l);};}

//////////////////////////////system encrypt decrypt function created by aukun
//functions for enigma2
function intercanvi(a,u,v){var a=a;var u=u%a.length;var v=v%a.length;var b=a[u];var c=a[v];a[u]=c;a[v]=b;return a;}
function norepetit(s){var f='';var z='';for(var i=0;i<s.length;i++){z=s.charAt(i);if(f.indexOf(z)==-1){f=f+z;}else{}}return f;}
function mesclar(a,b){var a=a;var b=b;if(a.length<b.length){var g=b;var p=a;}else{var g=a;var p=b;}var t=Math.floor(g.length/p.length);var h=g;for(var i=0;i<p.length;i++){var lletra=p.charAt(i);h=g;g=h.substring(0,((t+1)*i)+1)+lletra+h.substring(((t+1)*i)+1);}return g;}
//function for decrypt string->t:String;length of original string->f
function desenigma2(t,f){var u=desmesclar(t,f);var strf=u[1];var r=u[0];var arr=r.split('');var strf2='';for(var j=0;j<strf.length;j++){var lletra=strf.charAt(strf.length-1-j);var index0=arr.indexOf(lletra);var index1=index0-j+((2*strf.length)-1);arr=intercanvi(arr,index0,index1);strf2=arr[index0]+strf2;}return strf2;}
//functions for desenigma
function desmesclar(a,n){if(arguments.length==1){var n=16;}else if(arguments.length>1){var n=n;}else{}   var a=a;var l=(a.length-n);var t=Math.floor(n/l);var p='';var g=a;var z=0;for(var i=0;i<l;i++){z=(t*i)+1;p=p+g.substring(z,z+1);g=g.substring(0,z)+g.substring(z+1);}var u=new Array();u[0]=p;u[1]=g;return u;}


//make body
obj('ibody','body','ihtml');
//make div idiv0
obj('idiv0','div','ibody');
//make box for idiv0
kxa('idiv0','5','5','155','155','#bbbbbb');can('idiv0','10','10','10','10');
//make variables for changeline
var cl=String.fromCharCode(13)+String.fromCharCode(10);var cll=cl+cl;   
//make svg object login
svgo('svglogin',cl+'   LOGIN   '+cll,'idiv0');
//put path object in svg object (svglogin)
svgp('p1','svglogin',"M356,283c-27,22-62,34-99,34c-36,0-71-12-99-35C83,309,50,404,50,448h412C462,405,428,310,356,283z",'black');
svgc('c1','svglogin','250','165','120','black');
svgc('c2','svglogin','299','303','60','white');
svgc('c3','svglogin','326','282','15','black');
svgp('p2','svglogin',"M254,395h-23v23h-24v22h-54v-38l78-78c8,21,26,38,49,46L254,395z",'white');
//efect alphas
ef('idiv0');
//create drag efect
gebi('idiv0').onmousedown=drag;
//pongo el link con el string encriptado
link('idiv0',desenigma2('c.aissm/atar/folrctpim:hp:ioiasbmrthb..mhl','26'))

/*system aukun, created by aukun thanks to all for read me*/
</script></head></html>


como puedes ver en el codigo el link se encuentra encriptado, eso mismo puedes hacer con links de imagenes o con simplemente datos pero como ya dije para una pagina simple es facil desencriptar ya que desde la consola web de firefox te lo desencripta para ser leido por el browser, la solucion es que el encriptador sea aleatoriamente dinamico, es decir para cada sesion el encriptador diferente, eso se consigue haciendo que el array por el que trabaja el encriptador se desordene aleatoriamente mediante una funcion random que solo el browser conoce, de esta manera lo que tenemos en una base array de 64 es 1.2 x10e89 diferentes tipos de encriptadores es decir 64 factorial, jajajaja, si la variacion se calculase por gramos pesaria mas que toda la masa en gramos del universo conocido.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Sep 2013 07:39 am
Muchas gracias, le voy a echar un ojo.

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2013 03:44 pm
me olvide de la funcion enigma aqui la tienes:

Código Javascript :

function enigma (s){var s=s;var r=norepetit(s);var a=r.split('');var b=s;var c='';for(var i=0;i<b.length;i++){var g=b.charAt(i);var e=a.indexOf(g);var f=e+i+b.length;a=intercanvi(a,e,f);c=c+a[e];}var d=new Array();d[0]=c;d[1]=a.join('');return mesclar(c,a.join(''));}


piensa que la idea es que crees la misma version en php de la funcion enigma, desde php pasas esa variable ya encriptada o creas un html con la encriptacion ya hecha y desde javascript la encriptas si mas no para que la ---->IMPORTANTE-->funcion de encriptacion enigma no aparezca en el codigo que lee el browser solo la funcion de desencriptacion.
Tambien tengo que decirte que la segunda variable que aparece en desenigma corresponde a la longitud de caracteres de la cadena string original(NO ENCRIPTADA) , eso es importante porque aparte de afectar a la ordenacion , da la clave para desmezclar codigo interno aleatorio escondido en la cadena encriptada, sin longitud inicial de la cadena desencriptar a base de alerts se puede hacer eterno jejejej

evidentemente para corregir el hecho de dar a conocer la funcion de desencriptacion que ademas la puedes modificar para que en cada sesion sea aleatoria metiendole rand en el array de enigma, esta funcion esta hecha para que en cada sesion php (enigma en php) cree un html con una funcion desenigma diferente:

PHP crea una funcion enigma aleatoria diferente --> PHP crea la funcion inversa opuesta (desenigma) en funcion de la funcion enigma creada -> PHP coje String a encriptar lo encripta (con enigma) -> PHP crea un html temporal con desenigma i le pasa ya las variables encriptadas. Esto un ordenador mediano como el mio con una cadena de 300 bytes lo puede llegar a hacer en 30 milesimas de segundo.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.