All pastes #75861 Raw Edit

Kaso

public text v1 · immutable
#75861 ·published 2006-06-30 17:41 UTC
rendered paste body
function Base64Encode( msg )

  -- hZ_Debug( "### ENCODING - "..msg.." ###" );

  local ret_msg = "";
  local msg_length = strlen(msg);
  local msgloop;

  -- Make sure the incoming message is 3-byte padded (leading spaces)

  if( mod(msg_length,3) == 2 ) then
  	msg = " "..msg;
  	msg_length = strlen(msg);
  end
  if( mod(msg_length,3) == 1 ) then
	msg = "  "..msg;
  	msg_length = strlen(msg);
  end

  -- Process the string

  -- local b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  
  local b64 = "yz012LdefghSnoMNO67ABix8ETUVWXPQRCDGHIJKcpqrstuvwZab345YjklmF9.,";

  for msgloop = 1,msg_length,3 do

	-- hZ_Debug( "Start Loop "..msgloop );

    	local char1 = string.byte( msg, msgloop );
	local char2 = string.byte( msg, msgloop+1 );
	local char3 = string.byte( msg, msgloop+2 );

	local byte1 = floor(char1 / 4); 			-- left 6 bits
	local byte2 = (16 * mod(char1,4)) + floor(char2/16);	-- right 2 bits + left 4 bits
	local byte3 = (4  * mod(char2,16)) + floor(char3/64);	-- right 4 bits + left 2 bits
	local byte4 = mod( char3, 64 );				-- right 6 bits

	local thisBlock = strsub(b64,byte1+1,byte1+1)..strsub(b64,byte2+1,byte2+1)..strsub(b64,byte3+1,byte3+1)..strsub(b64,byte4+1,byte4+1);


	-- hZ_Debug( char1.." - "..char2.." - "..char3 );
	-- hZ_Debug( byte1.." = "..byte2.." = "..byte3.." = "..byte4 );
	-- hZ_Debug( thisBlock );
	
	ret_msg = ret_msg..thisBlock;

  end
  
  return ret_msg 

end