Encriptacion/decriptación

26/01/2004 - 17:10 por Karma | Informe spam
Hola, hace poco pregunte sobre la encriptación de valores de variables para
que por querystring no me los modifiquen

me gustaria sí alguien supiese, adaptar el codigo que les paso a dos
funciones de tal manera que encripte el valor de la variable, no el nombre.

es decir, si le paso "curso=1&ejercicio=2"
quiero que sea
"curso442812374123scfw5t43254wf435&ejercicio=ascsjdfwd324r3r"

o algo así.

y con funciones de encripta(texto) y decripta(texto) conseguir así encriptar
el valor de las variables.


Os paso el codigo de Dani Castillo para que lo veais, y si pudiera ser,
basarse en eso.
Gracias por vuestra gran ayuda


 

Leer las respuestas

#1 Karma
26/01/2004 - 17:11 | Informe spam
Aqui va el código que he comentado antes...

En asp es muy comun pasar información entre páginas por parámetro, la tipica
llamada de
documento.asp?codigo%

que muestra el documento de identificador 25 de una tabla...

En algunos casos, el tener un paso de parámetros tan claro no es nada
conveniente, es muy facil que alguien interesado en nuestra información
obtenga una "copia" de toda nuestra base de datos pidiendo sucesivamente
todos los códigos (no a mano, sino por programa claro, algo que "lea" de
internet los sucesivos códigos de 1 en adelante).

Conviene en estos casos, aparte de otras posibles protecciones de los datos,
ocultar un poco esos parámetros, una forma común es pasarlos por metodo post
(formulario), otra forma que es la que vamos a ver aquí es usar una pequeña
rutina que encripte y desencripte parámetros.

Este ejemplo trabaja como un módulo, veamoslo:


Nombre del fichero:encripta.asp [descargar]



<%' Por daniel castillo. http:\\www15.brinkster.com\danic\ %>
<%
' parámetros "seguros", rutina de encriptación/decriptación
' básica de parámetros

dim sparams,sparamsv
if request.querystring("sp")<>"" then
unsecparam
end if

function requestparam(n)
dim k,r
n=lcase(n)
r=""
if request.querystring("sp")<>"" then
for k=lbound(sparams) to ubound(sparams)
if n=sparams(k) then
r=sparamsv(k)
end if
next
end if
requestparam=r
end function

function secparam(param)
dim ck,ts,key,param2,chk
ts=cSng(time())
randomize time
ck=clng(ts* rnd *1000000)
' codifica "param" , una cadena de parametros
' ck es la clave
ck=cstr(ck)
for k=1 to len(ck)
if (cstr(mid(ck,k,1))>="0") and (cstr(mid(ck,k,1))<="9") then
key=key & mid(ck,k,1)
end if
next
do while len(key)<len(param)
key=key & key
loop
for k=1 to len(param)
' función de encriptación
' sirve cualquier función reversible que
' para todo c [0..255] el resultado esté entre [100..999]
param2=param2 & (100+ asc(mid(param,k,1)) +cint(mid(key,k,1)) )
' función de checksum
chk=(chk+asc(mid(param,k,1))) mod 256
next
secparam="?sp=" & param2 & "&chk=" & chk & "&ck=" & ck
end function

sub unsecparam ()
dim param,ck,ts,k,chk,ch
dim param2
param=request.querystring ("sp")
ck=request.querystring("ck")

for k=1 to len(ck)
if (mid(ck,k,1)>="0") and (mid(ck,k,1)<="9") then
key=key & mid(ck,k,1)
end if
next
if len(key)>0 then

do while len(key)<len(param)
key=key & key
loop
for k=1 to len(param)/3
' función de desencriptado, reversa de la de encriptar
ch= cint(mid(param,k*3-2,3))-cint(mid(key,k,1))-100
param2=param2 & chr (ch )
' función de checksum
chk=(chk+ ch) mod 256
next
end if
if cstr(chk)<>request.querystring("chk") then
param2=""
response.write "Error no definido:"
%><script languaje="javascript"><!--
top.document.location="\index.asp";
// -->
</script>
<%
response.end
end if
sparams= split(param2,"&")
sparamsv= split(param2,"&")
dim v
for k=lbound(sparams) to ubound(sparams)
v=split(sparams(k),"=")
sparams(k)=lcase(v(0))
sparamsv(k)=v(1)
next
end sub
%>





Analicemoslo por encima, proporciona funciones para encriptar y desencriptar
parámetros, básicamente tiene dos funciones útiles:

secparam(cadena) , devuelve una cadena "encriptada" de parámetros, por
ejemplo, si queremos llamar a un link de esta forma
<a href="documento.asp?codigo%"> documento </a>
<a href="documento.asp<%=secparam("codigo%")%>"> documento </a>
(sin el primer interrogante)

Para recuperar parámetros encriptados llamaremos a
parametro=requestparam("codigo")

Es case sensitive, cuidado con las mayusculas


veamos un ejemplo de cómo usar este módulo


Nombre del fichero:prueencripta.asp [descargar]



<%'Por daniel castillo. http:\\www15.brinkster.com\danic\%>
<!--#include file ="encripta.asp" -->
Al llamar a este asp se ha pasado como parámetro:
<br>
nombre=<%=requestparam("nombre")%><br>
codigo=<%=requestparam("codigo")%><br>
<br>
Ejemplo de link<br>
<a href="prueencripta.asp<%=secparam("nombre=dani&codigo%")%>">
Probar parámetros nombre=dani&codigo%
</a><br>
<a href="prueencripta.asp<%=secparam("nombre=pepe&codigo")%>">
Probar parámetros nombre=pepe&codigo
</a>





fijaos en la url que sale una vez pulsado el link, (o con propiedades), es
una "longaniza" de números.

La fórmula de encriptado puede hacerse mucho más compleja claro, pero esta
tampoco está mal , de todas formas podria mejorarse con una clave interna
(no pasada por parámetros tambien como ésta) , que asegurara mejor los
datos, esto es solo un ejemplo, también puede combinarse con otros métodos
de protección.

También podeis intentar modificar la url de un paso de parámetro, vereis que
el checksum "salta" y os redirige a un index.asp (en teoria la página
inicial), de forma que dificultamos el que la gente vaya "probando" codigos
a ver si encuentra algo interesante.



"Karma" escribió en el mensaje
news:bv3e1d$sv5$
Hola, hace poco pregunte sobre la encriptación de valores de variables


para
que por querystring no me los modifiquen

me gustaria sí alguien supiese, adaptar el codigo que les paso a dos
funciones de tal manera que encripte el valor de la variable, no el


nombre.

es decir, si le paso "curso=1&ejercicio=2"
quiero que sea
"curso442812374123scfw5t43254wf435&ejercicio=ascsjdfwd324r3r"

o algo así.

y con funciones de encripta(texto) y decripta(texto) conseguir así


encriptar
el valor de las variables.


Os paso el codigo de Dani Castillo para que lo veais, y si pudiera ser,
basarse en eso.
Gracias por vuestra gran ayuda












Preguntas similares