Avatar billede mora Nybegynder
10. august 2004 - 03:22 Der er 14 kommentarer og
1 løsning

Konvertering af salt værdi

Jeg har følgende stykke C kode der laver en blowfish encrypted tekst ud fra de 2 salt værdier.

Jeg skal ha omregnet de salt, så de passer ind i nedestående java assignment.

C - SALT værdier
#define SALT1  0xdeadd061
#define SALT2  0x23f6b095

Java - salt værdier
byte[] salt = {
(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
(byte)0x56, (byte)0x34, (byte)0xE3, (byte)0x03
};




C - Encrypt routine
static void blowfish_encrypt_pass(char *text, char *new)
{
  u_32bit_t left, right;
  int n;
  char *p;
 
  blowfish_init((unsigned char *) text, strlen(text));
  left = SALT1;
  right = SALT2;
  blowfish_encipher(&left, &right);
  p = new;
  *p++ = '+';                  /* + means encrypted pass */
  n = 32;
  while (n > 0) {
    *p++ = base64[right & 0x3f];
    right = (right >> 6);
    n -= 6;
  }
  n = 32;
  while (n > 0) {
    *p++ = base64[left & 0x3f];
    left = (left >> 6);
    n -= 6;
  }
  *p = 0;
}



Nogen der ved hvordan ?
Avatar billede brilleaben Nybegynder
10. august 2004 - 09:03 #1
Det nemmeste ville være at dekryptere din krypterede tekst med den gamle salt og derefter kryptere plaintext med den nye salt.
Avatar billede arne_v Ekspert
10. august 2004 - 09:19 #2
Er det ikke bare:

#define SALT2  0x23f6b095
byte[] salt = {
(byte)0x61, (byte)0xd0, (byte)0xad, (byte)0xde,
(byte)0x95, (byte)0xb0, (byte)0xf6, (byte)0x23
};

?
Avatar billede mora Nybegynder
10. august 2004 - 15:32 #3
BLOW Encryption algorithm
    Original String  : test
    Encrypted String : ZponSJBwMfw=
    Decrypted String : test

men hvis jeg encrypter test med c programmet bliver det OiudU0ziu4f1

brilleaben Hvordan vil du så decrypt det med den gamle salt?
Jeg får teksten i krypteret form, og skal decrypte den i java.
Avatar billede brilleaben Nybegynder
10. august 2004 - 16:47 #4
Du har vel en krypteringsrutine i Java, ikke?
Avatar billede mora Nybegynder
10. august 2004 - 18:27 #5
Kiggede efter nogle i går, og fandt en wrapper til javas egne routiner, men salt skal jo være ens for at den kan decrypt med blowfish ?
Så skal ha sat byte[] salt til den samme salt som de 2 variabler i c programmet.
Avatar billede arne_v Ekspert
10. august 2004 - 19:38 #6
Jeg får faktisk:

L8+tc5K4r0Y

:-)

Må vi se din Java kode ?
Avatar billede mora Nybegynder
10. august 2004 - 21:27 #7
Avatar billede arne_v Ekspert
10. august 2004 - 21:49 #8
Hvad compiler I med ?

Jeg får fejl på:
  KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
med alle de Java versioner som jeg har prøvet med !
Avatar billede mora Nybegynder
10. august 2004 - 22:17 #9
java version "1.4.2_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06)
Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mode)

C:\blow>javac StringEncrypter.java
Avatar billede arne_v Ekspert
10. august 2004 - 22:44 #10
Hm.

Jeg fik det til at compile command line.

Et eller andet er fucked i min Eclipse.
Avatar billede arne_v Ekspert
10. august 2004 - 22:47 #11
Men jeg forstår slet ikke koden.

Så vidt jeg kan se bruger I ikke Blowfish hvor test bliver til ZponSJBwMfw= ...
Avatar billede brilleaben Nybegynder
10. august 2004 - 23:03 #12
Det er lidt svært at se hvordan koden skal ændres når vi ikke kan se koden.  Men umiddelbart burde du kunne operere med to nøgler:

key=blowfish_makekey(gl_salt, password);
plain_text=blowfish_decrypt(encrypted_text, key);
new_key=blowfish_makekey(ny_salt, password);
encrypted_text=blowfish_encrypt(plain_text, key);

... er den måde man normalt ville gribe det an.  Alt afhængig af din blowfish implementation er
dette muligt.  Er salt'en hardcodet i implementationen skal du finde det i kildeteksten og ændre
i den - arne_v gav et eksempel overfor.
Avatar billede mora Nybegynder
10. august 2004 - 23:51 #13
jeg har ikke brug at encode det i java igen.
Men jeg kan ikke ændre C koden der encoder teksten, så jeg bliver nød til at få java til at bruge den salt fra C programmet.

Bliver måske mere et java problem end C.
Avatar billede brilleaben Nybegynder
11. august 2004 - 10:29 #14
Umiddelbart burde salt så være:

byte[] salt = {
(byte)0xde, (byte)0xad, (byte)0xd0, (byte)0x61,
(byte)0x23, (byte)0xf6, (byte)0xb0, (byte)0x95
};

Men pas på det med endianess osv.
Avatar billede mora Nybegynder
02. september 2004 - 01:16 #15
Det kom ikke til at virke...
Klarer det nok med et JNI kald til c programmet der kan decrypte det.
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