Foros del Web » Programación para mayores de 30 ;) » .NET »

Encriptar de ida y vuelta

Estas en el tema de Encriptar de ida y vuelta en el foro de .NET en Foros del Web. Hola gente! Tengo una duda para avezados lectores y participantes de este Foro... Tratando de mejorar un poco la seguridad de mi proyecto, tengo un ...
  #1 (permalink)  
Antiguo 24/12/2004, 09:28
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Antigüedad: 21 años
Puntos: 0
Exclamación Encriptar de ida y vuelta

Hola gente!

Tengo una duda para avezados lectores y participantes de este Foro...

Tratando de mejorar un poco la seguridad de mi proyecto, tengo un web service que obtiene de mi aplicacion el Id de la aplicacion y el nombre del Equipo de donde viene esa Id y en funcion de eso, le dice qué string de conexion tiene que usar, de esa forma, yo puedo tener varias aplicaciones en varios Servidores (desarrollo o produccion), donde cada aplicacion tiene un Id por ejemplo:

Aplicacion1 Id1
Aplicacion2 Id2
Aplicacion3 Id3

Etc.

Ese Id lo guardo en el web.config en appsettings, cuando llamo al webservice hago algo como:

localhost.chequearstring(configurationsettings.app settings("IdSistema"))

El webservice recibe como ven el Id de la aplicacion que está consultando y encima se fija el nombre del equipo de donde viene esa solicitud, de ahi llama a un procedimiento almacenado en SQL que sería algo como:

Código:
Select string from StoreIds
where Idsistema = @IdSistema
and equipo = @equipo
Porqué necesito saber el equipo????

Porque no todos los servidores tienen acceso a determinada aplicacion, asi entonces el servidor 1 puede tener acceso a la aplicacion1 y a la aplicacion2 pero no a la aplicacion3, entonces, si no devuelve datos el procedimiento, la solicitud es rechazada, asi de simple...

Muy bien, hasta aqui vamos barbaro!

Ahora....

Cómo puedo hacer para mandar esos datos al webservice de forma encriptada??? y como puedo hacer para que el webservice los reciba, los desencripte y haga la consulta y luego, el resultado de la consulta, lo envíe encriptado para que la aplicacion de turno la reciba y la desencripte?????

He visto un post donde RootK si no me equivoco, aconseja a un colega de usar el hashnomeacuerdocuanto, el tema es que con eso se podía usar SHA1 o MD5, el problema en ese sentido es que esos metodos de encriptacion hasta donde tengo vistos, son solo unidireccionales, es decir, podés encriptar, pero no podés desencriptar...

Alguien puede darme una ayudita porfis????

De antemano les agradezco enormemente!!!!
__________________
:adios: Henry Rodriguez :adios:
El todo es mucho mas que la suma de las partes<-- No se quien lo dijo pero suena interesante :)
  #2 (permalink)  
Antiguo 24/12/2004, 13:07
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años
Puntos: 7
Imports System.Security.Cryptography
Imports System.IO
Imports System.Text

Public Class Kerberos

Public Shared Function Encriptar(ByVal str_pEncriptar As String) As String
Return Encriptar(str_pEncriptar, "P2#5o*gH")
End Function

Public Shared Function Encriptar(ByVal str_pEncriptar As String, ByVal str_pKeyPrivada8carac As String) As String
Dim des As DESCryptoServiceProvider
Dim inputByteArray() As Byte
Dim ms As MemoryStream
Dim cs As CryptoStream
Dim mIV() As Byte = {&H45, &H32, &HA5, &H18, &H67, &H58, &HAC, &HBA}
Dim mkey() As Byte = {}

Try
mkey = System.Text.Encoding.UTF8.GetBytes(str_pKeyPrivada 8carac.Substring(0, 8))
des = New DESCryptoServiceProvider
inputByteArray = Encoding.UTF8.GetBytes(str_pEncriptar)
ms = New MemoryStream
cs = New CryptoStream(ms, des.CreateEncryptor(mkey, mIV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Encriptar = Convert.ToBase64String(ms.ToArray())
Catch e As Exception
Encriptar = ""
Finally
des = Nothing
ms = Nothing
cs = Nothing
End Try

End Function
Public Shared Function Desencriptar(ByVal str_pDesEncriptar As String) As String
Return Desencriptar(str_pDesEncriptar, "P2#5o*gH")
End Function

Public Shared Function Desencriptar(ByVal str_pDesEncriptar As String, ByVal str_pKeyPrivada8carac As String) As String
Dim inputByteArray(str_pDesEncriptar.Length) As Byte
Dim des As DESCryptoServiceProvider
Dim ms As MemoryStream
Dim cs As CryptoStream
Dim encoding As System.Text.Encoding
Dim mIV() As Byte = {&H45, &H32, &HA5, &H18, &H67, &H58, &HAC, &HBA}
Dim mkey() As Byte = {}

Try
mkey = System.Text.Encoding.UTF8.GetBytes(str_pKeyPrivada 8carac.Substring(0, 8))
des = New DESCryptoServiceProvider
inputByteArray = Convert.FromBase64String(str_pDesEncriptar)
ms = New MemoryStream
cs = New CryptoStream(ms, des.CreateDecryptor(mkey, mIV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
encoding = System.Text.Encoding.UTF8
Desencriptar = encoding.GetString(ms.ToArray())
Catch e As Exception
Desencriptar = ""
Finally
des = Nothing
ms = Nothing
cs = Nothing
End Try
End Function


Public Shared Function EncriptarPassword(ByVal str_password As String) As String
Dim num_longitud As Int32
Dim num_contador As Int32
Dim num_caracter As Int32
Dim num_semilla As Int32
Dim str_cifrado As String
Dim str_prueba As String

num_longitud = str_password.Trim.Length
For num_contador = 0 To num_longitud - 1
num_caracter = Asc(str_password.Substring(num_contador, 1).ToUpper())
num_semilla = num_contador + 1
num_caracter += num_semilla
str_prueba = Convert.ToChar(num_caracter)
str_cifrado += Convert.ToChar(num_caracter)
Next
Return str_cifrado
End Function

Public Shared Function DesencriptarPassword(ByVal str_passwordEncriptado As String) As String
Dim num_longitud As Int32
Dim num_contador As Int32
Dim num_caracter As Int32
Dim num_semilla As Int32
Dim str_cifrado As String = String.Empty
Dim str_prueba As String
num_longitud = str_passwordEncriptado.Trim.Length
For num_contador = 0 To num_longitud - 1
num_caracter = Asc(str_passwordEncriptado.Substring(num_contador, 1))
num_semilla = num_contador + 1
num_caracter -= num_semilla
str_prueba = Convert.ToChar(num_caracter)
str_cifrado += Convert.ToChar(num_caracter)
Next
Return str_cifrado
End Function

Public Shared Function EncriptarIni(ByVal str_cadena As String) As String
If Len(Trim(str_cadena)) = 0 Then
Return ""
End If

Dim str_tabla, str_output, str_char As String
Dim str_primero, str_segundo, str_tercero As String
'------------ antes era long
Dim num_k, num_m, num_pos, num_length As Int32
Dim rnd As New Random
num_length = Len(Trim(str_cadena))
str_output = ""
str_tabla = "5736082914"

For num_k = 1 To 10
str_output += String.Format("{0:000}", rnd.Next(0, num_k * 25))
Next

str_output += Convert.ToString(num_length * num_length + 100) + String.Format("{0:000}", rnd.Next(0, 256))

For num_k = 1 To num_length
num_pos = str_tabla.IndexOf(Mid(String.Format("{0:00}", num_k), 2, 1)) 'pos(w_tabla,mid(string(k,"00"),2,1))
num_m = (num_pos) * 3 + 1
str_primero = Left(str_output, num_pos * 3)
str_segundo = String.Format("{0:000}", Asc(Mid(str_cadena, num_k, 1)) + num_k * num_k)
str_tercero = Mid(str_output, ((num_pos + 1) * 3) + 1)
str_output = str_primero + str_segundo + str_tercero
Next
Return str_output
End Function

Public Shared Function DesencriptarIni(ByVal str_cadena As String) As String
Dim str_tabla, str_output, str_char As String
'-------------------- antes era long
Dim num_k, num_m, num_pos, num_length As Int32
Dim rnd As New Random
num_length = Len(Trim(str_cadena))
str_output = ""
str_tabla = "5736082914"

If num_length <> 36 Then
Return ""
End If
'num_length = Math.Sqrt(CType(Mid(str_cadena, 31, 3), Decimal) - 100)
num_length = Convert.ToInt32(Math.Sqrt(CType(Mid(str_cadena, 31, 3), Decimal) - 100))
For num_k = 1 To num_length
num_pos = str_tabla.IndexOf(Mid(String.Format("{0:00}", num_k), 2, 1))
'num_m = Convert.ToDecimal(Mid(str_cadena, (num_pos) * 3 + 1, 3))
num_m = Convert.ToInt32(Mid(str_cadena, (num_pos) * 3 + 1, 3))
num_m = num_m - num_k * num_k
str_output += Convert.ToChar(num_m)
Next
Return str_output
End Function
End Class
  #3 (permalink)  
Antiguo 27/12/2004, 09:50
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Antigüedad: 21 años
Puntos: 0
Opa Mickel!!!!! creo que te voy a encender una velita!!!!

Voy a copy and paste esta clase y a implementarla y a ver si me resulta, muchas gracias!!!!!!!!!
__________________
:adios: Henry Rodriguez :adios:
El todo es mucho mas que la suma de las partes<-- No se quien lo dijo pero suena interesante :)
  #4 (permalink)  
Antiguo 27/12/2004, 10:37
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
He visto un post donde RootK si no me equivoco, aconseja a un colega de usar el hashnomeacuerdocuanto, el tema es que con eso se podía usar SHA1 o MD5,
La cuestion es que el sha1 y md5 como tal no son algoritmos reversivos, es decir, encripta la información pero ya no la puedes desencriptar, todo depende de que sea lo que necesites..

De todas formas por aqui te dejo otro:

http://www.codeproject.com/dotnet/en...decryption.asp

O puedes buscar los de RijndaelManaged classes

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:35.