entschlüsseln verwenden rijndael. DCPcrypt Bibliothek. Delphi

Ich habe einen IV (Initialisierungsvektor) und Schlüssel, auch ein Kryptogramm. Muss ich nur noch entschlüsseln des kryptogramms. Aus dem internet fand ich DCPcrypt Kryptographische Komponente-Bibliothek v2.
So, nun habe ich Sie erreicht, um die Codierung.

procedure TForm1.Button1Click(Sender: TObject);
var
key:Ansistring;
ivector,indata,outdata:string;
begin
  key := 'abc12345679';  //<--key for decrypting
  dcp_rijndael1.InitStr(key,TDCP_sha1);  //I don't understand why i need hashing!?

  ivector := edit2.Text;  //initialization vector
  dcp_rijndael1.SetIV(ivector);
  dcp_rijndael1.BlockSize := Length(ivector); //'This variable should be the same size as the block size' says the documentation

  indata := edit1.Text;  //getting the cryptogram

  dcp_rijndael1.CipherMode := cmCBC;

  dcp_rijndael1.DecryptCBC(indata,outdata,Length(indata));
  label3.Caption := outdata;                                    //output to label
end;

Dieser code gibt mir einen Fehler aus. "Lokale Variablen" - Fenster zeigt indata, outdata, ivector, wichtige Variablen wie 'Unzugänglich Wert'.
Oder vielleicht gibt es einen anderen Weg, es zu tun. Dies scheint ziemlich geradlinig, aber.
Vielen Dank im Voraus.

Nach Wodzu Hilfe:
Beachten Sie, dass ich empfangen, entschlüsselt string base64-kodierter, so dass ich denke, ich muss es zuerst zu Dekodieren.

var
  Form1: TForm1;
  StringToEncrypt, StringToDecrypt, DecryptedString: string;
  vector:string;

procedure TForm1.Button2Click(Sender: TObject);
begin
  vector := '1234567812345678';        //Length 16
  stringtodecrypt := '2YOXZ20Z7B3TRI/Ut8iH/GpEZWboE2tnnWU';
  stringtodecrypt := Decode64(stringtodecrypt);  //after encrypted string is sent over internet, it is encoded with base64, so i need to decode it.
  SetLength(DecryptedString, 36);  //36 is the length of the output
  DCP_rijndael1.Init('MyKey:128bit', 128, @Vector[1]);
  DCP_rijndael1.SetIV(Vector);
  DCP_rijndael1.BlockSize := Length(Vector); //Should this be also 128
  DCP_rijndael1.DecryptCBC(StringToDecrypt[1], DecryptedString[1], Length(StringToDecrypt)*2);  //Here i get hieroglyph as a result. Why is length multiplied with 2?
  decryptedstring := Encode64(decryptedstring);  //Here i get less hieroglyph, but would like to get correct decrypted string. I doubt the necessity of encoding

  ShowMessage(DecryptedString);

end;

Kann ich nicht machen, diesen code zu entschlüsseln, die Daten, die jemand anderes verschlüsseln (mit PHP) (nach dem verschlüsseln der Daten ist kodiert mit base64).
Hinweis! verschlüsselt text-Länge ist nicht das gleiche wie der entschlüsselte text Länge!

  • Und die exakt Fehlermeldung?
  • Ich sehe nicht ein Konstruktor für die dcp_rijndael1 überall in Ihrem code, das könnte das problem sein. Zu den lokalen Variablen müssen Sie zum deaktivieren der compiler-Optimierung.
  • dieser Fehler steht nicht in Zusammenhang mit der Entschlüsselung. Nach dem Aufruf DecryptCBC Methode 'indata', 'outdata' und andere Variablen zu "unzugänglich Wert', wenn ich also versuchen, die Beschriftung mit einem unzugänglichen Variablen bekomme ich Fehler. Ich denke, ich mache etwas falsch, also die Zuordnung von Daten auf Etiketten ist ein kleines problem.
  • Vereinfachung der tatsächlichen Verhalten, kann man sagen debugger zeigt "unzugänglich Wert" - label für Variablen der linker bestimmt sind, nicht verwendet werden, nachdem die Ausführung zeigen. Aber wenn Sie verwenden Sie in Ihrem code danach, der debugger wird Ihnen zeigen, den Wert für diese Variablen. Also, wenn Sie wollen, um zu sehen, dass Wert im debug-Zeit, nur sind einige code, der verwendet den Wert (z.B. ein ShowMessage oder Zuweisung als Wert an einer öffentlichen Eigenschaft oder Globale variable.
InformationsquelleAutor Peacelyk | 2010-11-20
Schreibe einen Kommentar