Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-11-2010, 11:25   #1
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
[C] Convertire un file in un numero intero

Salve a tutti,

come da oggetto vorrei poter convertire un file qualsiasi in un numero intero. Per la trattazione degli interi utilizzo la libreria GMP, quindi posso trattare interi molto grandi. Qualcuno se la cosa sia fattibile?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 12:04   #2
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
Un file è una sequenze ordinata di bit quindi è già un numero (tipicamente enorme) espresso in base 2... tuttavia quello che credo tu stia cercando è una funzione hash.

ciao!

british
british è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 12:37   #3
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
magari qualche implementazione di md5

http://www.faqs.org/rfcs/rfc1321.html

Ultima modifica di tuccio` : 19-11-2010 alle 12:39.
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 14:47   #4
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da british Guarda i messaggi
Un file è una sequenze ordinata di bit quindi è già un numero (tipicamente enorme) espresso in base 2...
Esatto. Ovviamente questo lo so bene, ed è proprio quel numero che vorrei ricavare.
Non voglio calcolare alcuna funzione di Hash, né SHA1, né MD5, che servono a tutt'altro. Mi serve sapere il file X corrisponde al numero Y. Stop. Mi serve un intero enorme, OK, anche in binario, ma posso (credo) sempre convertirlo in intero.

Grazie mille.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 14:58   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2781
Ho dato un'occhiata alla libreria GMP, visto che può trattare numeri arbitrariamente grandi si può fare a patto che la memoria sia sufficiente (quindi potrai ottenere un numero solo per file abbastanza piccoli).
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 15:01   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Onestamente mi sembra un po' una follia. Il numero che cerchi potrebbe essere generato appunto dalla concatenazione dei numeri ASCII che rappresentano le lettere, il punto è che la grandezza di questo numero dipende strettamente dalla lunghezza della stringa.

Già una stringa di 80 caratteri vorrebbe dire mediamente un numero con 160 cifre, che è un NUMERO ENORME, immagina un file di qualche megabyte (1 milione di caratteri significherebbe un numero con in media 2 milioni di cifre).

Un hash SHA1 è un numero a 160bit, ovvero 20bytes, sai che la lunghezza sarà sempre quella e che la probabilità di collisione è comunque molto bassa.

Quindi un hash SHA1 in realtà è proprio quello che cerchi, per definizione di funzione di hash.

Poi bisognerebbe vedere esattamente cosa ci vorresti fare.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 15:24   #7
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
(quindi potrai ottenere un numero solo per file abbastanza piccoli).
Questa non è una cosa felice per me, anche se a dire il vero forse si può frammentare il file, e "procedere" a blocchi.

Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Onestamente mi sembra un po' una follia.
Lo so. Infatti detta così, non può sembrare altro che una follia, ma per scopi di ricerca, devo provare a crittografare dei file con la Homomorphic Encryption usando una libreria che però tratta interi. Questo tipo di crittografia ha alcune proprietà che a me interessano, e vorrei sfruttarle sui file.
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Già una stringa di 80 caratteri vorrebbe dire mediamente un numero con 160 cifre, che è un NUMERO ENORME, immagina un file di qualche megabyte (1 milione di caratteri significherebbe un numero con in media 2 milioni di cifre).
Finché la libreria GMP "regge", questo problema per il momento non mi preoccupa. I problemi potranno esserci dal momento in cui si applica la crittografia sul file.

Ecco perché dell'hash non me ne faccio nulla. O almeno credo, dal momento che facendo l'hash di un file, il risultato è una "stringa" ma rispetto al file ho perso informazioni, e non posso recuperare il file originario dato l'hash.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 17:49   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
[..]
Ecco perché dell'hash non me ne faccio nulla. O almeno credo, dal momento che facendo l'hash di un file, il risultato è una "stringa" ma rispetto al file ho perso informazioni, e non posso recuperare il file originario dato l'hash.
L'hash di un file è un numero intero, la sua rappresentazione in esadecimale ti può confondere facendoti credere che sia una stringa .

Chiaramente l'hash non è reversibile (quantomeno facilmente).

Comunque stavo pensando che potresti ridurre di molto i dati (specialmente se parliamo di testo) usando qualche libreria per la compressione prima di calcolare il numero.

Potresti fare quanto segue:

- applichi un algoritmo di compressione a tua scelta
- calcoli la sequenza di caratteri ascii associata al file compresso e tiri fuori un numero relativemente grosso

a quel punto per tornare indietro basterebbe:

- ricreare il file compresso a partire dal numero
- decomprimere il file risultante

Una nota: sarebbe auspicabile normalizzare i codici ASCII così che siano tutti della stessa lunghezza.

Cerco di spiegarmi: come saprai l'ASCII standard prevede i caratteri dallo 0 al 126.

Questo significa che se ti trovi davanti a 2 caratteri (32 e 107 per esempio) quando costruisci il numero otterresti 32107.

Questo numero chiaramente può essere interpretato in diversi modi, ad esempio potrei associarlo ai caratteri 32, 10, 7 oppure a 3, 21, 07 e così via...

Per cui dovresti cercare di normalizzarli affinché il numero più alto e quello più basso che vuoi rappresentare siano di dimensione fissa, ad esempio se decidi di farli di 2 cifre bisognerebbe farli rientrare in un intervallo tra 10 e 99 (ovvero 89 caratteri utili, quindi hai delle limitazioni).

Usando sequenze di 3 numeri potresti mappare tutti i caratteri, tuttavia già solo con stringhe di 2 caratteri ti troveresti un numero con 6 cifre.

Ribadisco che ci vuole poco affinché una cosa del genere diventi ingestibile.

Ultima modifica di WarDuck : 19-11-2010 alle 17:52.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 17:57   #9
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
WarDuck: grazie. Oltre che estremamente chiaro, sei stato molto gentile. Apprezzo molto la tua risposta.

Quando parlavo di "stringa" (messa a posta tra virgolette), intendevo una quantità generica, ma hai fatto bene a puntualizzare.

La tua soluzione andrebbe anche bene, ma purtroppo non posso utilizzarla, perché lo scopo è quello di trattare qualsiasi tipo di file. Auspicabilmente di qualsiasi dimensione (entro certi limiti, ovviamente).

Il tuo post mi ha chiarito molte cose, e credo che dovrò riflettere bene sul da farsi perché quello che avevo in mente di fare comincia ad essere un po' problematico.

Grazie molte.

__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 23:51   #10
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Scusa, mi stavo rifacendo un attimo due calcoli.
Tu hai scritto che "Già una stringa di 80 caratteri vorrebbe dire mediamente un numero con 160 cifre". Verissimo che hai detto "mediamente", ma volevo confrontarmi per vedere se i calcoli che ho fatto io siano giusti.

1 char = 1 byte = 8 bit
80 caratteri => 80x8 = 640bit
Quindi il numero massimo rappresentabile è 2^640 -1, ovvero circa 4*10^192, ovvero, 4 seguito da 192 zeri. Quindi un numero da 193 cifre. Giusto?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 00:00   #11
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
Scusa, mi stavo rifacendo un attimo due calcoli.
Tu hai scritto che "Già una stringa di 80 caratteri vorrebbe dire mediamente un numero con 160 cifre". Verissimo che hai detto "mediamente", ma volevo confrontarmi per vedere se i calcoli che ho fatto io siano giusti.

1 char = 1 byte = 8 bit
80 caratteri => 80x8 = 640bit
Quindi il numero massimo rappresentabile è 2^640 -1, ovvero circa 4*10^192, ovvero, 4 seguito da 192 zeri. Quindi un numero da 193 cifre. Giusto?
esatto , i tuoi calcoli sono corretti !
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 00:11   #12
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Grazie per la conferma!
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 00:14   #13
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Mmm sarà l'ora ma non ho ben capito cosa intendiate...

Se ho una stringa tipo "ABCD", sono 4 byte, ovvero 4 caratteri.

Se ogni carattere ASCII lo rappresentassimo con 2 cifre (perché ad esempio abbiamo scelto di usare i numeri da 10 a 99), abbiamo un numero i cui simboli o cifre sono 8, ovvero il doppio.

Esempio:

A = 10
B = 11
C = 12
D = 13

ABCD (4 cifre) = 10111213 (8 cifre)

Per cifre intendo le cifre con cui viene rappresentato graficamente, non come viene rappresentato nel calcolatore, forse voi intendevate quest'ultima cosa?
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 00:23   #14
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2781
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
Questa non è una cosa felice per me, anche se a dire il vero forse si può frammentare il file, e "procedere" a blocchi.
Penso sia la cosa migliore da fare, d'altra parte quasi tutti gli algoritmi di crittografia si applicano a blocchi secondo diversi schemi.
Ad ogni modo se consideri un file come una stringa di testo o come un intero il numero di bit che ti serve per rappresentare l'uno o l'altro non cambia. Non so come GMP rappresenti internamente gli interi ma meglio di così non può fare senza perdere informazioni (a meno che non comprima i dati ma ne dubito). Quindi quando dicevo che non potrai ottenere numeri da file troppo grandi intendevo dire che c'è un limite fisico che è quello della memoria.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 01:12   #15
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
devo provare a crittografare dei file con la Homomorphic Encryption usando una libreria che però tratta interi.
e tu hai già una libreria che la implementa? e ti serve un array di int o cosa? se tu avessi una funzione che prende un array di char, unsigned char o void ti basterebbe fare un file mapping, non dovresti fare proprio nulla

il problema è che se piglia un array di int e il file non è di dimensione multipla della dimensione del tipo int è un casino :/
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 08:51   #16
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
forse voi intendevate quest'ultima cosa?
Sì sì, io intendevo proprio quello, ovvero data la rappresentazione binaria su disco di quel file, ottengo l'intero.
La soluzione ASCII la devo per forza scartare, nel mio caso.

Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Non so come GMP rappresenti internamente gli interi
Si tratta di interi a precisione multipla ed il tipo di dato è un mpz_t, ed ecco la parte di codice in questione nel file /usr/include/gmp.h:
Codice:
typedef struct
{
  int _mp_alloc;		/* Number of *limbs* allocated and pointed
				   to by the _mp_d field.  */
  int _mp_size;			/* abs(_mp_size) is the number of limbs the
				   last field points to.  If _mp_size is
				   negative this is a negative number.  */
  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
} __mpz_struct;

#endif /* __GNU_MP__ */


typedef __mpz_struct MP_INT;    /* gmp 1 source compatibility */
typedef __mpz_struct mpz_t[1];
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Quindi quando dicevo che non potrai ottenere numeri da file troppo grandi intendevo dire che c'è un limite fisico che è quello della memoria.
Ok, certamente, in caso vedrò qual'è questo limite fisico e saprò fino a che punto potrò fare quello che mi serve.

Quote:
Originariamente inviato da tuccio` Guarda i messaggi
e tu hai già una libreria che la implementa?
Sì, si chiama libpaillier, e funziona molto bene (provando con numeri interi).

Quote:
Originariamente inviato da tuccio` Guarda i messaggi
se tu avessi una funzione che prende un array di char, unsigned char o void ti basterebbe fare un file mapping, non dovresti fare proprio nulla
Dunque, queste sono le tre funzioni che servono ad inizializzare il tipo di dato da cifrare:

Codice:
/*
  Allocate and initialize a paillier_plaintext_t from an unsigned long
  integer, an array of bytes, or a null terminated string.
*/
paillier_plaintext_t* paillier_plaintext_from_ui( unsigned long int x );
paillier_plaintext_t* paillier_plaintext_from_bytes( void* m, int len );
paillier_plaintext_t* paillier_plaintext_from_str( char* str );
Quindi in realtà potrei trattare il file come una stringa e provare a passargli quella. Però ancora non sono convinto.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 09:59   #17
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
probabilmente è più efficiente usare la versione long, perché hai 1/8 dei numeri.. però ti costringerebbe a fare un lavoro sui file.. e per file che superano la memoria messa a disposizione dall'os dovresti anche inventarti qualcosa per non tenere tutto in ram

con il mapping l'os fa tutto da solo

ps: dovresti usare la versione che prende void* non quella che prende char*

Ultima modifica di tuccio` : 20-11-2010 alle 10:01.
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 10:06   #18
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
OK, grazie, ora mi metto a fare delle prove.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 10:33   #19
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Confermo quanto detto fin'ora. Anche trasformando un file di pochi byte in un void*, il tipo di dato mpz, non riesce a contenere un intero corrispondente al contenuto del file:
gmp: overflow in mpz type
Aborted
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Gli utenti italiani scelgono ChatGPT: &e...
Anche Xiaomi avrà il suo trifold:...
È Natale in casa Tesla: arriva la...
Shai-Hulud diventa più cattivo: e...
Aereo ultraleggero si schianta in atterr...
Windows 11 ha una nuova schermata Esegui...
Netflix si prende HBO, Harry Potter e il...
Meta, arriva il nuovo supporto dell'acco...
Spunta blu sotto accusa: perché l...
Motorola presenta edge 70 Cloud Dancer: ...
La Lexus LFA ritorna, ma è elettr...
Cristiano Ronaldo entra nell'intelligenz...
Wi-Fi 7 Mesh in ogni stanza: guida defin...
Hytale evita Steam al lancio per non ric...
Ritorna il bonus elettrodomestici: ripar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v