BlackBerry Developers Group Argentina Message Board › Desarrollo Java › Cifrado de Contexto
| Freddy Campos | |
|
|
buenas estoy tratando de hacer una aplicacion que maneje cifrado de contexto para blackberry
la intencion es emular la funcion que hace el php hash_init para ir cifrando obteniendo bytes de un hmac hash_hmac hago bien el hmac en la bb pero no se como usar contextos alguien podria ayudarme Gracias incluyo parte del codigo public byte[] mi_sha1(String dni,byte[] prPass,byte cantidad) { byte[]Out = new byte[16]; byte[]kopad = new byte[63]; byte[]kipad = new byte[63]; byte[]pPass = new byte[63]; byte[]dni1 = dni.getBytes(); byte[]resultado = new byte[300]; byte[]resultado1 = new byte[300]; int i, pPassint; SHA1Digest digest = new SHA1Digest(); Arrays.fill(kopad,(byte)0x00); // lleno de zeros el array Arrays.fill(Out,(byte)0x00); // lleno de zeros el array Arrays.fill(kipad, (byte)0x00);// lleno de zeros el array Arrays.fill(pPass, (byte)0x00);// lleno de zeros el array pPass = prPass; dni1[15] = cantidad; // funcion hmac for (i=0; i<63;i++){ kopad=(byte) (pPass ^ 0x5c); kipad=(byte) (pPass ^ 0x36); } digest.update(kipad); digest.update(dni1); digest.update(kopad); digest.update(resultado1); /* este codigo esta en delphi necesito portarlo al java.. de antemano gracias procedure my_Sha1(dni:string;prPass:PbyteArray;can const size:integer=15; var kopad:array[0..63] of byte; kipad:array[0..63] of byte; pPass:array[0..63] of byte; i:integer; ctx:TSHA1Context; digest:TSHA1Digest; dni1:array[0..15] of byte; begin //MY SHA1 HASH FillChar(kopad,Sizeof(kopad),0); FillChar(kipad,Sizeof(kipad),0); FillChar(pPass,Sizeof(pPass),0); Move(prPass^,pPass,16); for i:=0 to size-1 do dni1:=strnumber2byte((dni[i+1])); dni1[15]:=cantidad; for i:=0 to 63 do begin kopad:=pPass xor $5c; kipad:=pPass xor $36; end; //1stPass SHA1Init(ctx); SHA1Update(ctx,@kipad[0],64); Sha1Update(ctx,@dni1[0],16); SHA1Final(ctx,digest); //2nd Pass SHA1Init(ctx); SHA1Update(ctx,@kopad[0],64); Sha1Update(ctx,@digest[0],20); Sha1Final(ctx,digest); //OUT move(digest,out_^,20); end; */ return Out; }; Edited by Freddy Campos on Feb 18, 2012 2:48 PM |
| Roger Navarro | |
|
No conozco bien la función de php, pero por lo que entiendo quieres cifrar un string y obtener un long del mismo o es otra cosa.
http://supportforums.... saludos. |
|
| Freddy Campos | |
|
|
Gracias por responder pero los string los paso a byte para el contexto.
y poder trabajar tranquilo en base a byte ya que el calculo real es apunta de byte es como trabajar con vectores de arrays pero no se me aclara la mente y usarlos aqui jejejeje espero me puedan dar una mano.. Gracias por el link me dio otra perspectiva del problema que tengo.. |
| Freddy Campos | |
|
|
necesito algo como esto
void spc_incremental_hmac(unsigned char *key, size_t keylen) { int i; HMAC_CTX ctx; unsigned int len; unsigned char out[20]; HMAC_Init(&ctx, key, keylen, EVP_sha1( )); HMAC_Update(&ctx, "fred", 4); HMAC_Final(&ctx, out, &len); for (i = 0; i < len; i++) printf("%02x", out); printf("\n"); HMAC_Init(&ctx, 0, 0, 0); HMAC_Update(&ctx, "fred", 4); HMAC_Final(&ctx, out, &len); for (i = 0; i < len; i++) printf("%02x", out); printf("\n"); HMAC_cleanup(&ctx); /* Remove key from memory */ } osea poder crear un cifrado de contexto gracias si pueden ayudarme |
| Freddy Campos | |
|
|
nadie me da una mano estoy que me rompo el coco... :(
|
| Roger Navarro | |
|
¿Que tipo de cifrado quieres hacer?, o ¿cual es tu requerimiento?, no programo en php y no estoy familiarizado con el termino cifrado de contexto, considero que seria bueno que lo explicaras sin entrar muy a detalle a nivel lenguaje especialmente si no es java ya que implica dedicarle un tiempo a interpretarlo y en mi caso no poseo tal tiempo para poder hacer eso, nos seria mas facil si nos explicas tu necesidad abstrayendote de la implementación y enfatizando mas el requerimiento, igual y hay una solución existente sobre lo que necesitas.
saludos. |
|
| Freddy Campos | |
|
|
Imaginemos esto tengo varios datos que quiero pasar por comprobación
Para ello existe la funcion hmac Dato uno (este es el dato uno). Como toda funcion hmac requiere clave y nos da un resuLtado como ejemplo Ab4df3e1bafe Dato dos (este es el dato dos). Como toda funcion hmac requiere clave y nos da un resuLtado como ejemplo 114df3e1bafe Ya tengo 2 datos cifrados ahora quiero cifrar los 2 en un solo contexto Tomando los 2 resultados cifrados Y crear uno por lo general no mayor a 20 cifras Luego preciso separas cada bits como si fuera una matrix de datos Pasarlos a decimal y tomar su primer numero de estos 20 y formar una clave nueva Todo con hmac - sha1 lo he logrado en delphi pero con java no soy tan diestro gracia Espero haberme explicado bien |
| Roger Navarro | |
|
Esta perfecto, revisando por ahí llegue a un tutorial para el uso de hmac . sha1, pero igual si lo que requieres es ver una implementación más completa, existe una alternativa a la librería criptográfica de blackberry llamada bouncycastle que existe su versión para j2me y que es usada para aplicaciones en blackberry, igual y si quieres ver como se implementan las funciones desde el código fuente, te podría convenir revisar la librería la cual es open source y puedes descargar el código fuente de la pagina, asi como ejemplos de la misma.
http://www.blackberry... http://www.bouncycast... http://jcetaglib.sour... saludos. |
|
| Freddy Campos | |
|
|
Venga amigo muchisimas graciaas. Vere lo que me comentas
Y luego colocare mis resultados os agradezco mucho |
| Freddy Campos | |
|
|
buenas buenas crees poder darme una manita para implementarlo en eclipse.. Gracias
|