AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DEC 5.1: Problem bei sprachübergreifender Verwendung von DEC
Thema durchsuchen
Ansicht
Themen-Optionen

DEC 5.1: Problem bei sprachübergreifender Verwendung von DEC

Ein Thema von Skunklon · begonnen am 9. Feb 2008 · letzter Beitrag vom 10. Feb 2008
 
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: DEC 5.1: Problem bei sprachübergreifender Verwendung von

  Alt 10. Feb 2008, 22:19
Hm, jo das nächste Problem. JAVA wird wohl an die Daten soviele Bytes dranhängen bis die geamte Nachricht ein Vilefaches von 8 oder 16 Bytes ist. Das dafür benutzte Padding Schemata kann sehr unterschiedlich sein. Da musst du mal in den JAVA Helpfiles stöbern. DEC paddet nur wenn die Nachricht in der Anzahl der Bytes nicht ohne Rest durch Cipher.BlockSize teilbar ist. Der letzte unvollständige Datenblock von X = Nachrichtenlänge modulo Cipher.BlockSize wird dann im cmCBC8 Modus verschlüsselt, Also das ist wie cmCBCx, wobei dieser CBC immer auf Blöcken von Cipher.BlockSize Bytes arbeitet. der cmCBC8 Modus arbeitet mit einem Feedback von 8 Bit = 1 Byte. Somit sind cmCBCx und cmCBC8 von iherer Funktionerweise identisch nur das sich die Datenbreite des Feeebackregisters verändert. Einmal ist es Cipher.BlockSize Bytes und das anderes mal ist es 1 Byte. Dieses Padding ist einfach, führt zu keiner Nachrichtenexpansion, simpel zu implementieren da meistens sowieso beide Feedbackgrößen unterstützt werden und es ist kryptogaphisch sicherer als viel der anderen Paddingschematas.

Du kannst also folgendes machen

1.) verschlüssel die Nachricht soweit bis alle Datenblöcke a Cipher.BlockSize verarbeitet sind
2.) den Rest der Nachricht in temp. Buffer kopieren und mit zusätzlichen Bytes am Ende expandieren, je nach Padding Schemata
3.) diesen Block weiterverschlüsseln und an die verschlüsselten Daten dranhängen

Du kannst weiterhin mit Cipher.EncodeStream(), .EncodeBinary() und .Encode() arbeiten. Nur musst du es zweimal aufrufen. Also so

Delphi-Quellcode:
var
  Remain,I: Integer;
  Buffer: array of Byte;
begin
  with TCipher.Create do
  try
    Mode := cmCBCx;
    Init(Password, SizeOf(Password), InitVector);
    Remain := Source.Size mod Context.BlockSize;
    EncodeStream(Source, Dest, Source.Size - Remain);
    if Remain > 0 then
    begin // Padding nach alter Methode
      SetLength(Buffer, Context.BlockSize);
      Source.ReadBuffer(Buffer[0], Remain);
      for I := Remain to High(Buffer) do
        Buffer[I] := I; // je nach Padding Schema befüllen
      Encode(Buffer[0], Buffer[0], Length(Buffer));
      Dest.WriteBuffer(Buffer[0], Length(Buffer));
    end;
  finally
    Free;
  end;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz