el unico codigo base64 utf16 que encontre [Enlace externo eliminado para invitados]
me tiraba unos caracteres diferentes al codificar
asi que a prueba y error quedo funcional en delphi 7
las 2 peronas del subforo delphi que entienden en este tema,
me corrijan si cometi una burrada
unit Unit2;

//unit untComBase64;
 
{SHL realiza un corrimiento de los bits del primer
operando hacia la izquierda (SHift Left),
 inyectando ceros por la derecha. Se desplazan
 tantos bits como se indique en el segundo operando. Ejemplo:
var 
a: byte; 
begin 
a := $57; // 01010111 
a := a shl 1; // 10101110 
a := a shl 2; // 10111000 
..... 
SHR es como SHL, pero el corrimiento
curre hacia la derecha, inyectándose ceros por la izquierda. }
 
interface
 
uses SysUtils,dialogs;
 
function encode64(s: string): string;
function decode64(s: string): string;
 
implementation
 
const
  tabChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  
function encode64(s: string): string;
var
  i       : Integer; // compteur
  charCode: Integer; // code du caract?re dans la table Unicode
  valToDec: Integer; // valeur ? d?cr?menter au fur ? mesure de la conversion
  nbrBits : Integer; // nombre de bits actuellement dans vaToDec (maximum 16 + 4)
  charPos : Integer; // position dans le tableau de codage en base64
begin
  Result   := '';
  charCode := 0;
  nbrBits  := 0;
  valToDec := 0;
 
  //parcours des caract?res
  
  for i := 1 to (Length(s)) do
  begin
  ///aca esta la magia resolver
     //multiplicar por 4
     //http://docwiki.embarcadero.com/RADStudio/Seattle/en/String_Types_(Delphi)

    charCode := (Ord(s[i])*4);



    nbrBits  := nbrBits + 16;
    valToDec := (valToDec shl 16) + charCode;


    // traiter les bits tant que l'on sais faire des groupements de 6
    // Procesar los bits como se le conoce a grupos de 6
    while (nbrBits - 6) >=0  do
    begin
      nbrBits  := (nbrBits - 6);
      charPos  := (valToDec shr (nbrBits ));

      //
      valToDec := valToDec - (charPos shl nbrBits);
      Result   := Result + tabChar[charPos + 1];



    end;

  end;
   //EN ESTA PARTE HABRIA QUE COLOCAR EL PRIMER CARACTER AL FINAL
   //y deletearlo

    result:=result+ (copy(result,0,1));
     delete(result,1,1);
    showmessage(result);

  // gestion des desniers bits + ajout des compl?ments
  if nbrBits > 0 then
  begin
    charPos := valToDec shl (6 - nbrBits);

    Result  := Result + tabChar[charPos + 1];

    for i := 1 to (6 - nbrBits) div 2 do
      Result := Result + '=';
  end;
end;
paresco malo ,pero soy bueno
Hola @joselin como has estado espero bien
Actualmente ya no trabajo en Delphi he migrado a lazarus pero al final es practicamente lo mismo.
Respecto a tu pregunta probé el algoritmo y claro cifra y descifra pero su resultado no parece el correcto lo compare con otros algoritmos de cifrado en internet y genera un cifrado totalmente distinto

En lo personal me gusta mas este algoritmo el cual hasta ahora me ha dado muy buenos resultados
[Enlace externo eliminado para invitados]
Ademas que concuerda con varios sitios web como estos

[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]

Recalco las pruebas las hice en lazarus 1.6 y en lo personal me anduvo bien
var
  encrypted:string; source:String;
begin

  source:=AnsiString('我是中国人 - Я китайский - Avión'); //chino - ruso - acento


  encrypted:=EncodeBase64(source);
  WriteLn(encrypted);

  source:=DecodeBase64(encrypted);
  WriteLn(source);
Imagen


Saludos....
Skype:crack8111
pero cuando codificas con powershell en utf16 me da este valor
$b = [System.Text.Encoding]::UNICODE.GetBytes("papanicolao1981")
[System.Convert]::ToBase64String($b)

cABhAHAAYQBuAGkAYwBvAGwAYQBvADEAOQA4ADEA

y con tu metodo es diferente
cGFwYW5pY29sYW8xOTgx
paresco malo ,pero soy bueno
Claro ya que la codificacion que hago es en utf8 y la que tu dices es en utf16
prueba con esta web [Enlace externo eliminado para invitados] y si codificas con utf32 tambien da un valor distinto.
Ya seria cuestion tuya saber cual codificacion quieres, pero aun asi el codigo que publicaste no conicide ni con utf8,utf16 o utf32
Skype:crack8111
solo funciona en delphi 7
otros ides superiores ya trabajan unicode
delphi 7 es obsoleto debe ser eso
o quisas es cierto y solo me funciona de milagro en mi DELPHI7
paresco malo ,pero soy bueno
Pues si seria recomendable migrar a un delphi mas nuevo hace tiempo probe delphi 2010 y me anduvo de perlas, las ultimas versiones de delphi son demasiado pesadas y claro siempre tienes la chance de probar lazarus el cual es unicode nativo ya lo miras tu.
Saludos....
Skype:crack8111
Responder

Volver a “Fuentes”