Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-03-2005, 10:23   #1
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
[c]Convertire base64 in ascii

Ho bisogno di convertire del testo scritto in base64 in ascii,
i dati che devo convertire mi vengono da un socket tcp.

il problema fondamentale e come prendere correttamente 6 bit alla volta (della codifica base64) invece di 8 bit dimenzione minima dei tipi nel c
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2005, 10:53   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
http://www.koders.com/c/fidFDC554B9F...299D93B5F.aspx
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2005, 11:41   #3
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Ho visto il link ed per fare una cosa a mio parere semplice usa metri e metri di codice.

Sto cercando di implementare diretamente io il codice di conversione e ditemi se io ho:

struct base64{int val:6;};

Ed eseguo poi le segunati operazioni:

struct base64 *b64=malloc(len*8/6*sizeof(struct base64));
memcpy(b64,valori,len);

dove valori è l'area di memoria dove ho i dati e len e la lunghezza dell'area di memoria contenente i dati.
potrei prendere il numero del carattere in base64 facendo semplicemente:
x=b64.val;
ma molto probabilmente questo metodo non funziona perche il record a una dimenzione minore di 8 bit, ma l'area di memoria allocata viene allocada come blocco di 8 bit per record..
Chiedo conferma..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2005, 19:03   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Questo l'ho scritto io in C++, ma c'è talmente poco C++ che non dovresti avere problemi (anche se con la string risolvo i problemi di allocazione)...
Codice:
#include <iostream>
#include <string>

using namespace std;

string Base64Encode(const string &data)
{
	const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	unsigned int dataLen = data.length();
	string res;

	for(int i=0; i<dataLen; i+=3)
	{
		unsigned int triplet;
		char tmp[5];
		
		triplet = (data[i] << 16)
			+ (((dataLen > (i+1))?data[i+1]:0) << 8)
			+ ((dataLen > (i+2))?data[i+2]:0);

		tmp[3] = base64[triplet & 0x3F];
		tmp[2] = base64[(triplet >> 6) & 0x3F];
		tmp[1] = base64[(triplet >> 12) & 0x3F];
		tmp[0] = base64[(triplet >> 18) & 0x3F];
		tmp[4] = '\0';
		
		res.append(tmp);
	}
	switch(dataLen % 3)
	{
	case 1:
		res[res.length()-2] = '=';
	case 2:
		res[res.length()-1] = '=';
	}
	return res;
}

inline int getBase64Pos(const char c)
{
	switch(c)
	{
	case '+':
		return 62;
	case '/':
		return 63;
	default:
		if(c >= 'A' && c <= 'Z')
			return c - 'A';
		else if(c >= 'a' && c <= 'z')
			return 26 + c - 'a';
		else if(c >= '0' && c <= '9')
			return 52 + c - '0';
		else
			return 0;
	}
	return -1;
}


string Base64Decode(const string &data)
{
	unsigned int dataLen = data.length();
	string res("");

	if(res[dataLen-1] == '=')
		--dataLen;
	if(res[dataLen-1] == '=')
		--dataLen;

	unsigned int buf;
	char tmp[3];

	for(int i=0; i<dataLen; i+=4)
	{
		int t1 = 0, t2 = 0, t3 = 0, t4 = 0;

		buf = 0;
		t1 = getBase64Pos(data[i]);
		t2 = getBase64Pos((dataLen > (i+1)) ? data[i+1]:'A');
		t3 = getBase64Pos((dataLen > (i+2)) ? data[i+2]:'A');
		t4 = getBase64Pos((dataLen > (i+3)) ? data[i+3]:'A');
		
		if(t1 < 0 || t2 < 0 || t3 < 0 || t4 < 0)
			return res;
		
		tmp[0] = (t1 << 2) + (t2 >> 4);
		tmp[1] = (t2 << 4) + (t3 >> 2);
		tmp[2] = (t3 << 6) + t4;
		tmp[3] = '\0';

		res.append(tmp);
	}

	return res;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2005, 22:04   #5
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Bello e fatto bene mi piace domani lo provo, mi serve per il mio progetto di un web server per interpretare le autorizzazioni inviate con
[code]
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
[code]
in relazione con questo velevo sapere se avevate anche delle informazioni a riguardo questa funzione, sto leggendo rfc 2068
dove c'e scritto che dentro al codice in base64 che dorebbe essere quello che inizia con la Q c'e username e password separate da ":" ma il carattere ":" non esiste in base64 come funziona..

Grazie e ciao..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 17-03-2005, 23:49   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma il ":" è nella stringa in chiaro...e dopo viene codificato...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 09:33   #7
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
questo è quello che sta scritto sulla specifica rfc2068

Quote:
Basic Authentication Scheme

The "basic" authentication scheme is based on the model that the user
agent must authenticate itself with a user-ID and a password for each
realm. The realm value should be considered an opaque string which
can only be compared for equality with other realms on that server.
The server will service the request only if it can validate the
user-ID and password for the protection space of the Request-URI.
There are no optional authentication parameters.

Upon receipt of an unauthorized request for a URI within the
protection space, the server MAY respond with a challenge like the
following:

WWW-Authenticate: Basic realm="WallyWorld"

where "WallyWorld" is the string assigned by the server to identify
the protection space of the Request-URI.

To receive authorization, the client sends the userid and password,
separated by a single colon (":") character, within a base64 encoded
string in the credentials.

basic-credentials = "Basic" SP basic-cookie

basic-cookie = <base64 [7] encoding of user-pass,
except not limited to 76 char/line>

user-pass = userid ":" password

userid = *<TEXT excluding ":">

password = *TEXT

Userids might be case sensitive.

If the user agent wishes to send the userid "Aladdin" and password
"open sesame", it would use the following header field:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Io no capisco bene l'inglese ma da quello che ho capito sembra che la stringa che contiente username e password contiene anche un carattere ":" in formato ascii che separa i due valori..

Ditemi se ho capito bene ho sbagliato qualcosa..
Ciao
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 11:15   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Come ti dicevo metti in chiaro useridassword e poi lo codifichi in base64...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 11:51   #9
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
No scusa non mi sono spiegato bene, sto creando un web server e quindi la stringa la ricevo dal client e io devo capirla (e io non capisc niente =-) ) poi scusa il carattere ":" non esiste nella codifica base64

Grazie ancora ciao.
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 11:54   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il carattere : non esiste nella stringa codificata, ma nella stringa decodificata... Ricevi la stringa di autorizzazione, la decodifichi e dopo cerchi i : a partire dall'inizio della stringa...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 12:26   #11
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
non ci ho capito niente ma il tu codice ha funzinato vittoria
ho scritto ciao come user e ciao come pass e....
questo e lo schifo inviato: Y2lhbzpjaWFv
questo è il risultato della tua funzione: ciao:ciao

Grazie e mi faresti un favore se me lo spieghi in dettaglio

haaa ho beccato un errorino stupido all'inizio:
Codice:
	if(res[dataLen-1] == '=')
		--dataLen;
	if(res[dataLen-1] == '=')
		--dataLen;
invece di:
Codice:
	if(data[dataLen-1] == '=')
		--dataLen;
	if(data[dataLen-1] == '=')
		--dataLen;
Anche gli dei possono sbagliare
Ciao ..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 16:11   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Hai ragione, ma probabilmente l'errore era in una versione parziale, sono andato a recuperarla da un vecchio backup...anche perchè il server di posta per cui l'ho sviluppato funzionava egregiamente

Riprovo a spiegarti il problema dei due punti...è la stringa in chiaro che deve contenere username e password separati dai due punti... E quindi la stringa codificata in base 64 la devi passare a Base64Decode che ti ritorna username e password in chiaro separati dai due punti...

Ultima modifica di cionci : 18-03-2005 alle 16:15.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 16:31   #13
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Si questo è chiaro l'unica cosa che non avevo capito è come funzionava in generale la codifica in base64,
questa dorebbe funzionare nel seguente modo:
ho una serie di dati come ad esempio una stringa,leggo questi dati sei bit per volta e a seconda del valore dei sei bit inserisco il carattere corrispondente
per decodificare invece:
ho una stringa decodificata in base64, a seconda del carattere che ho mi ricavo il valore dei sei bit, e poi li riunisco nella mia codifica..

Giusto?? se è cosi adesso ho capito tutto..
Grazie di tutto e ciao..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2005, 16:44   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì...è così
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Booking.com integra Revolut Pay: nasce i...
DGX Spark a 175 fps con ray tracing su C...
Red Dead Redemption 2 Enhanced è ...
3Dfx Voodoo 2, una GPU nata con la scade...
Apple Watch: la Mela dovrà versar...
TIM e Nokia insieme per potenziare il 5G...
Musk lancia la nuova era dei DM su X con...
A Dallas Fort Worth entrano in azione se...
Black Friday HONOR: le promozioni su sma...
'È finalmente il momento': tutti ...
L'e-bike Also TM-B di Rivian ha una traz...
Scaldarsi con il mining di Bitcoin? Negl...
Valve sorprende: la nuova Steam Machine ...
Steam Machine sarà aggiornabile, ...
Samsung investirà 450 trilioni di...
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: 14:56.


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