Avatar billede repsak Nybegynder
30. juli 2004 - 09:42 Der er 17 kommentarer og
1 løsning

Konvertere imellem encodings

Jeg har fået smidt en Base64 string i min DB, som repræsenterer et krypteret password.

Hvordan får jeg det gendannet til mit normale password? Jeg har både kryptering og dekrypteringsmetoden, men jeg formoder at jeg fejler i nogle encodings. (da jeg er ret ny i dette felt)

while(reader.Read()){
  Console.WriteLine(Decrypt(new UTF8Encoding().GetBytes(reader.GetString(0))));
}

Jeg gætter på at det er Base64 og UTF8Encoding som ikke matcher, men jeg er tabt i hvordan det så gøres.
Avatar billede arne_v Ekspert
30. juli 2004 - 10:12 #1
Har du "fundet" Convert ToBase64String og FromBase64String ?
Avatar billede repsak Nybegynder
30. juli 2004 - 10:43 #2
Hehe ja dem har jeg set, men fik fejlen "Ugyldigt tegn i en Base-64-streng".

Mine erklæringer ser sådan her ud:

static byte[] iv = { 1, 2, 3, 4, 100, 6, 4, 8, 9, 10, 11, 12, 13, 14, 15, 1 };
static Encoding utf = new UTF8Encoding();
static byte[] key = utf.GetBytes("dfgrgerg");
static DES des = new DESCryptoServiceProvider();

static string Encrypt(string input){
  ICryptoTransform encrypt = des.CreateEncryptor(key, iv);
  byte[] array =  encrypt.TransformFinalBlock(utf.GetBytes(input), 0, utf.GetByteCount(input));
  return Convert.ToBase64String(array);
}

static string Decrypt(byte[] cipher){
  ICryptoTransform decrypt = des.CreateDecryptor(key, iv);
  return utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
}
Avatar billede arne_v Ekspert
30. juli 2004 - 10:52 #3
Du får vel fejlen i FromBase64String ?

Og hvor kalder du den ?
Avatar billede arne_v Ekspert
30. juli 2004 - 10:53 #4
jeg ville nok lave det som:

static string Decrypt(String input){
  byte[] cipher = Convert.FromBase64String(input);
  ICryptoTransform decrypt = des.CreateDecryptor(key, iv);
  return utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
}
Avatar billede repsak Nybegynder
30. juli 2004 - 11:02 #5
"Længden af de data der skal dekrypteres er ugyldig"

først udfører jeg denne sql:
string.Format("UPDATE person SET password = '{0}' WHERE id='{1}';",Encrypt(iEnum.Value.ToString()), iEnum.Key);

derefter denne:
dbPage.Sql = "SELECT id, password FROM person;";
IDataReader reader = dbPage.GetIDataReader();
while(reader.Read())
  Console.WriteLine(reader.GetString(0)+ " " + Decrypt(reader.GetString(1)));
Avatar billede arne_v Ekspert
30. juli 2004 - 11:07 #6
Umiddelbart ser det OK *hvis* alle PW er krypteret.
Avatar billede repsak Nybegynder
30. juli 2004 - 11:20 #7
en hurtig SELECT giver dette: SbRBAZU46X9bhOeSVo3C98KDNgxcj7hff/4PlFJwN9Qzjv8DU01IErVUgFf7BlDrCXDzdXzWY3U=

så noget er altså blevet krypteret på et eller andet plan ;-)
Avatar billede arne_v Ekspert
30. juli 2004 - 11:29 #8
Jo men der er ikke nogen WHERE på SELECT så den returnerer alle
records.

Hvis der er en ikke krypteret (udover den krypterede) så ...

Ellers check længden før du gemme rog efter du har hentet og
sammenlign.
Avatar billede repsak Nybegynder
30. juli 2004 - 11:42 #9
kodeudsnit:

static string Encrypt(string input){
  ...
  Console.WriteLine("EN:"+Convert.ToBase64String(array).Length);
  ..
}

static string Decrypt(string input){
  Console.WriteLine("DE:"+input.Length);
  ...
}

Resultat:
EN = 24
DE = 48

ved du hvordan det kan være?
SQL:  password BLOB
det benyttede password til denne test er 'kode'
Avatar billede arne_v Ekspert
30. juli 2004 - 12:01 #10
Hvis du konverterer til base64 string kan du godt bruge varchar !
Avatar billede arne_v Ekspert
30. juli 2004 - 12:01 #11
Jeg er ret sikker på at du får gemt i db med 1 char = 2 bytes og hentet
fra db med 1 char = 1 byte.
Avatar billede repsak Nybegynder
05. august 2004 - 15:20 #12
hmm ja, men hvor regulerer men det? Jeg har ikke bevidst korregeret noget...
Avatar billede arne_v Ekspert
05. august 2004 - 22:50 #13
Kan du lave et lille standalone program som kan genskabe problemet.

Det er sikkert helt banalt. Men lidt svært at kredse sig ind på.
Avatar billede repsak Nybegynder
05. august 2004 - 23:13 #14
jo klart - man bliver bare så doven af at være spørger på eksperten ;-)
Avatar billede repsak Nybegynder
06. august 2004 - 08:54 #15
Ok, problemt lå i at jeg ikke havde fået ændret datatypen fra BLOB til VARCHAR i db endnu...
Takker
Avatar billede arne_v Ekspert
06. august 2004 - 09:21 #16
Ah !
Avatar billede arne_v Ekspert
06. august 2004 - 09:21 #17
OK at jeg ligger et svar så ?
Avatar billede repsak Nybegynder
06. august 2004 - 09:53 #18
Klart
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester