Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilker

base64 encoder/decoder

Recommended Posts

Ae galera, esse é pros que curtem algoritmos, eu esses dias tava dando uma olhada no base64 e resolvi implementar o algoritmo dele no Javascript, pra usos convencionais ele é totalmente inutil XD, mas quem quizer fazer experimentos, ele é uma boa maneira para transferir dados binarios por ajax, voce pode encodar com base64 pra enviar, e decodificar os dados recebidos a partir do modelo base64 (que é um modelo que usa apenas caracteres simples, dessa forma pode ser perfeitamente usado em um protocolo que suporta transporte de texto plano).

 

chega de lenga lenga, ta ai o codigo:

 

Base64 = {
	charset: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
	charset_urlsafe: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',
	
	encode: function(data, urlsafe) {
		var charset = urlsafe ? Base64.charset_urlsafe : Base64.charset;
		
		var i = 0;
		var len = data.length;
		var output = '';
		var c1, c2, c3;
		var e1, e2, e3, e4;
		
		while (i < len) {
			c1 = data.charCodeAt(i++);
			c2 = data.charCodeAt(i++);
			c3 = data.charCodeAt(i++);
			
			e1 = c1 >> 2;
			e2 = ((c1 & 0x3) << 4) | (c2 >> 4);
			e3 = ((c2 & 0xf) << 2) | (c3 >> 6);
			e4 = c3 & 0x3f;
			
			if (isNaN(c2)) {
				e3 = e4 = 64;
			} else if (isNaN(c3)) {
				e4 = 64;
			}
			
			output += charset.charAt(e1);
			output += charset.charAt(e2);
			output += charset.charAt(e3);
			output += charset.charAt(e4);
		}
		
		return output;
	},
	
	decode: function(data, urlsafe) {
		var charset = urlsafe ? Base64.charset_urlsafe : Base64.charset;
		
		var i = 0;
		var len = data.length;
		var output = '';
		
		var e1, e2, e3, e4;
		var c1, c2, c3;
		
		while (i < len) {
			e1 = charset.indexOf(data.charAt(i++));
			e2 = charset.indexOf(data.charAt(i++));
			e3 = charset.indexOf(data.charAt(i++));
			e4 = charset.indexOf(data.charAt(i++));
			
			c1 = (e1 << 2) | (e2 >> 4);
			c2 = ((e2 & 0xf) << 4) | (e3 >> 2);
			c3 = ((e3 & 0x3) << 6) | e4;
			
			output += String.fromCharCode(c1);
			if (e3 != 64) output += String.fromCharCode(c2);
			if (e4 != 64) output += String.fromCharCode(c3);
		}
		
		return output;
	}
};

para utilizar não tem segredo, é só chamar as funções estaticamente, exemplos:

 

var decodificado = Base64.decode('CONTEUDO A SER DECODIFICADO COM BASE64');
var codificado = Base64.encode('CONTEUDO A SER CODIFICADO COM BASE64');
var codificadoUrlSafe = Base64.encode('CONTEUDO A SER CODIFICADO COM BASE64', true);

o segundo parâmetro pode ser utilizado como true tanto no encode/decode, e serve para codificar utilizando o padrão URL-Safe, que quer dizer que esses dados podem ser trafegados direto na URL sem problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.