Datentypen Byte-Array RSA

huckleberry

Bekanntes Mitglied
Hallo Forum,

ich habe ein ByteArray. Diesen möchte ich mittels RSA verschlüsseln. Dei Verschlüsselung an sich funktioniert. Jedoch habe ich folgendes Problem:

Mein Array kan alle Werte von -128 bis 127 annehmen.
Java:
byte [] plain = {-128, -127, ..., 0, 1, 2, 3, .... , 127 };
Diese habe so auf werte von 0-255 gemappt.

Mein RSA-Exponent und mein RSA-Module immer grösser als 256. Somit bekomme ich verschlüsselte Werte grösser als 256. Dadurch kann ich die Nachricht nicht wieder in ein byte-Array speichern um es zu versenden.
Naja ich kann es schon, aber es kommen miese Ergebnisse raus.

Ich muss mit byte-Arrays arbeiten.

Danke für alle Hinweise.

Mfg Huck
 
Zuletzt bearbeitet:
Ja. Das könnte helfen
Java:
int number;
byte[] data = new byte[4];
 
// int -> byte[]
for (int i = 0; i < 4; ++i) {
    int shift = i << 3; // i * 8
    data[3-i] = (byte)((number & (0xff << shift)) >>> shift);
}
 
// byte[] -> int
number = 0;     
for (int i = 0; i < 4; ++i) {
    number |= (data[3-i] & 0xff) << (i << 3);
}
 
Hm ok ich habe es implementiert. Problem:

zB 0xACED0005 entspricht der
signed -1393754107 oder unsigned 2901213189

Meine RSA Testparameter: // n: 82703 | e: 11 | d: 44771 | p1: 433 | p2: 191 | phi:82080
c = m^d % n
m = c^e % n

Nehmen wir mal m= -1393754107 CONGRUENT 39552 % 82703
c = (-1393754107 ^ 44771) % 82703 = 44975
Nun c verschicken. Empfänger
m = (44975 ^ 11) % 82703 = 39552

Aber eben nicht -1393754107 und die binäre Presentation von -1393754107 ist anders als 39552.

Bin grad voll verpeilt. ???:L

Ich hätt am liebsten -1393754107 als Ergebnis um wie XHELP gezeigt hat in ein byte-Array zu schieben 0xACED0005.. Somit hätte ich ja wieder meine ursprüngliche Rohdatei entschlüsselt.

*grübel* :autsch:
 
Du kannst doch zuerst alles was du willst in byte[] schreiben und dann byte-weise verschlüssln.

So hatte ich ja anfangs vor. (Es hatte geklappt, für alle ungeraden)

Nehmen wir das mal ein byte. Ich möchte zB die
Java:
byte m = (signed)-84 = (unsigned)172;
verschlüsseln. RSA parameter wie oben: // n: 82703 | e: 11 | d: 44771 | p1: 433 | p2: 191 | phi:82080

  • Singed: c = m ^ d % n = -84 ^ 44771 % 82703 = 33685 (wie packe ich nun mein c in EIN byte?)
  • Unsigned c = 172 ^ 44771 % 82703 = 69790 (gleiches Problem)
 
Byte ist 8 bit. (die Sache mit dem Vorzeichen lassen wir mal weg)
11111111_2 > 255_10
Damit kannst du Zahlen zwischen 0 und 255 darstellen. Wie willst du denn damit 69790 darstellen?
 
Nicht wozu, sondern wie? Das geht nicht. Du musst die 69790 wieder als mehrere bytes darstellen (wenn du es so machen willst)
 

Zurück
Oben