Fehler in Encoder gefunden! Das ShiftLinks mit der Multiplikation war verkehrt herum:
Aus
nr := nr * 256 + ord(source[i]);
muss
nr := nr * 256 + ord(source[5+1-i]);
gemacht werden.
Dito mit der 2. Berechnung darunter.
Delphi-Quellcode:
function Base32Encode(source: String): String;
const
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
var
i: Integer;
nr: Int64;
begin
result := '';
while length(source) >= 5 do
begin
nr := 0;
for i := 1 to 5 do
nr := nr * 256 + ord(source[5+1-i]);
for i := 1 to 8 do
begin
result := result + alphabet[(nr mod 32) + 1];
nr := nr div 32;
end;
delete(source, 1, 5);
end;
nr := 0;
if length(source) > 0 then
begin
for i := 1 to length(source) do
nr := nr * 256 + ord(source[Length(source)+1-i]);
for i := 1 to 8 do
begin
if nr > 0 then
begin
result := result + alphabet[(nr mod 32) + 1];
nr := nr div 32;
end
else
result := result + '=';
end;
end;
end;
So stimmts dann auch mit dem anderen Code überein und geht unter D2009+.