|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Messina
Messaggi: 561
|
problemino Java e numeri
salve a tutti ragazzi devo implementare l'sha-1 in java(so che esiste gia la classe ma la prof lo vuole implementato).Stando alle specifiche tecniche del NIST http://www.itl.nist.gov/fipspubs/fip180-1.htm si lavora con numeri a 32bit (i nostri cari int sono piu che sufficenti), il mio problema è che quando seguo l'algoritmo ci sono delle somme, ed essendo che si lavora con numeri molto grandi ci sono overflow a non finire e quindi al primo overflow si sballano tutte le altre somme, allora mi sono detto devo lavarare con valori unsigned, solo che il nostro caro java non ha valori unsigned.....come fare?
se implemento una specie di somma binaria guardando la configurazione dei bit? mi era pure venuto in mente di scrivermi la funzione in C(che ha i valori unsigned) e portarmela dentro java con i metodi native(solo che non ho idea di come si faccia).... grazie a tutti :P |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Forse non è un'idea particolarmente brillante od originale ma... hai pensato di usare i long al posto degli int, anche solo per le somme?
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Messina
Messaggi: 561
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Mi sembra strano che sommando (due) numeri a 32 bit si arrivi ad un numero più grande di 64 bit?
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi per quanto riguarda il signed/unsigned dovrebbe essere indifferente. Chiaramente se usi valori signed (in Java) e fai ad esempio conversioni da byte a int, devi stare attento, così come agli shift a destra. In Java devi usare >>> e non >>. Per il resto basta che "segui" una implementazione fatta in C.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Messina
Messaggi: 561
|
Quote:
1 perche devo usare >>> e non >>?(stai parlando solo degli shift a destra?) 2 passami l'implementazione in C plz ![]() EDIT: GRANDISSIMI ....dovevo usare >>> però non sapevo di questo operatore lol :| fa uno shift a destra mettendo a sinistra solo 0? perche ho l'impressione che >> a sinistra metta degli 1....che poi sono un'idiota perche anche se ci sono overflow i bit sempre quelli restano... Ultima modifica di arcer : 09-08-2007 alle 16:39. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Nel primo caso rimette nel bit più alto il segno (quello che era ... 0 o 1), nel secondo caso mette sempre 0 nel bit più alto. La trovi dappertutto. http://en.wikipedia.org/wiki/SHA_hash_functions
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:14.





















