
12/09/2005, 05:37
|
| | Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 21 años, 1 mes Puntos: 0 | |
Encriptacion Buenas,
Os comento un poco, hace mucho mucho tiempo :) hice una aplicacion en VB para encriptar unos passwords de la BD, pues bien ahora estoy programando en visual C# y por perreria quiero utilizar la mismas funciones pero no acaba de funcionar bien.
Os pongo el codigo en VB:
Public Function Encrypt(ByVal cadena As String)
Dim longCadena As Long
Dim longClau As Long
Dim pCa As Long
Dim pCl As Long
Dim retorn As String
Dim c As Integer
Dim clau As String
clau = "n0 t1ndr3m t3mp5"
longCadena = Len(cadena)
longClau = Len(clau)
pCa = 1
pCl = 1
If longClau = 0 Then
Encrypt = ""
Exit Function
End If
While pCa <= longCadena
c = Asc(Mid(cadena, pCa, 1)) + Asc(Mid(clau, pCl, 1))
If c > 254 Then
c = c - 254 + 31
End If
retorn = retorn & Chr(c)
pCa = pCa + 1
pCl = pCl + 1
If pCl > longClau Then
pCl = 1
End If
Wend
Encrypt = retorn
End Function
Public Function Decrypt(ByVal cadena As String)
Dim longCadena As Long
Dim longClau As Long
Dim pCa As Long
Dim pCl As Long
Dim retorn As String
Dim c As Integer
Dim clau As String
clau = "n0 t1ndr3m t3mp5"
longCadena = Len(cadena)
longClau = Len(clau)
pCa = 1
pCl = 1
If longClau = 0 Then
Decrypt = ""
Exit Function
End If
While pCa <= longCadena
c = Asc(Mid(cadena, pCa, 1)) - Asc(Mid(clau, pCl, 1))
If c < 32 Then
c = c + 254 - 31
End If
retorn = retorn & Chr(c)
pCa = pCa + 1
pCl = pCl + 1
If pCl > longClau Then
pCl = 1
End If
Wend
Decrypt = retorn
End Function
----------------------------------------------------------------------------
Aqui stan las funciones q he "traspasado" a C#
using System;
using System.Text;
namespace Encripta
{
public class Encriptacion
{
private int nCa;
private int nC1;
private String sclau;
public Encriptacion()
{
}
public String Encriptar(String scadena)
{
Encoding ascii=Encoding.ASCII;
String sresultado=null;
sclau="AqUi PaSANdo 3l RatiLLO2";
Byte[] Auxiliar;
Byte[] codificar;
Byte[] codificar2;
Auxiliar=new Byte[scadena.Length];
int nvalor;
nCa=0;
nC1=0;
while (nCa<scadena.Length)
{
codificar=ascii.GetBytes(scadena.Substring(nCa,1)) ;
codificar2=ascii.GetBytes(sclau.Substring(nC1,1));
nvalor=(Int32)codificar[0]+(Int32)codificar2[0];
Auxiliar[nCa]=(Byte)nvalor;
if (nvalor>254)
{
nvalor = nvalor - 254 + 31;
Auxiliar[nCa]=(Byte)nvalor;
}//if
nCa = nCa + 1;
nC1 = nC1 + 1;
if (nC1>sclau.Length)
{
nC1=1;
}//if
}//while
sresultado=ascii.GetString(Auxiliar);
return sresultado;
}//Encriptar
public String Desencriptar(String scadena)
{
Encoding ascii=Encoding.ASCII;
String sresultado=null;
sclau="AqUi PaSANdo 3l RatiLLO2";
Byte[] Auxiliar;
Byte[] codificar;
Byte[] codificar2;
Auxiliar=new Byte[scadena.Length];
int nvalor=130;
nCa=0;
nC1=0;
while (nCa<scadena.Length)
{
Auxiliar[0]=(Byte)nvalor;
String s=ascii.GetString(Auxiliar);
codificar=ascii.GetBytes(scadena.Substring(nCa,1)) ;
codificar2=ascii.GetBytes(sclau.Substring(nC1,1));
nvalor=(Int32)codificar[0]-(Int32)codificar2[0];
Auxiliar[nCa]=(Byte)nvalor;
if (nvalor<32)
{
nvalor = nvalor + 254 - 31;
Auxiliar[nCa]=(Byte)nvalor;
}//if
nCa = nCa + 1;
nC1 = nC1 + 1;
if (nC1>sclau.Length)
{
nC1=0;
}//if
}//while
sresultado=ascii.GetString(Auxiliar);
return sresultado;
}//Desencriptar
}
}
Pues bien en VB tenemos la funcion Asc q pasa de int a ASCII y en C# utilizo(no se si es correcto): Encoding ascii=Encoding.ASCII;
Esta funcion tiene los metodos getByte(para coger el valor en Bytes) getString y getChars
Pues si yo en mi funcion encriptar le paso la Cadena "AB" esta me devuelve que los valors de Auxiliar son el 130,179(hasta aqui correcto, un codigo encripatado formado por un "cuadrado" y un 3) pero luego en desencriptar cuando coge con el getBytes el valor del de la 1ª posicion de la cadena ya encriptada es una especie de l "cuadrado"me devuelve un 2 en vez del 130 q le tendria q corresponder y no tengo ni idea de pq...
Luego habia pensado q en vez del getString utilizar el GetChars, pero claro este trabaja cuando en la funcion encriptar probase:
Chars[] sresultado=new Chars[scadena.lenght]//declaro y dimension vlbe
Y luego hiciese:
sresultado=ascii.getChars(Auxiliar);
Esto no se si es correcto....
Alguna sugerencia?¿
GRACIAS |