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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Probleme mit dem code, den ich gepostet bevor Sie versuchen, diese version mit streams.
und hier ist, wie es zu benutzen:
und eine version für Streicher:
wenn Sie weitere Hilfe benötigen lass es mich wissen.
Ich bin mit dieser Bibliothek selbst, aber ich bin ver - /entschlüsseln von strings in andere Art und Weise.
Der Grund, der Sie immer fehlerhaft ist, dass Sie auf eine falsche Art der Daten. Übergeben Sie die Saiten, aber Sie sollten übergeben werden einem Puffer von Daten zu entschlüsseln.
In dieser Codezeile:
Dieser Methode ist nicht zu erwarten, dass die Saiten.
Ändern Sie Ihren code wie folgt:
Nach edit:
Beispiel für WideStrings:
Hoffe, das hilft.
Haben Sie einige Probleme mit der demo, die Sie zur Verfügung gestellt:
Außerdem haben Sie versucht, die anderen Bibliotheken, die könnte die Sache aufzuklären:
Ich die DCPCrypt Komponenten regelmäßig und geschrieben haben, eine wrapper-Klasse für Sie zu machen es einfacher zu bedienen.
Zunächst ich nehme an, Sie haben, ließ Sie die Komponente auf die form, da sehe ich keinen Konstruktor/Destruktor aufgerufen wird, oder eine lokale Instanz der block-cipher-Klasse, wenn dies nicht der Fall ist das erste problem, ist das.
Wenn Ihre lokalen Variablen gezeigt werden, wie unzugänglichen stellen Sie sicher, dass die Anwendung erstellt wurde, die in debug und ohne Optimierung, dies kann verhindern, dass der debugger beobachten Sie die Variablen.
Letzte hier ist etwas code, der helfen kann, ich habe keine verschlüsselten Daten, so kann nicht testen, ich habe noch nie verwendet die rijndael-Chiffre so nicht bieten jede Hilfe, die es gibt.
IN diesem code der vector ist ein dynamisches array und die Länge festgelegt und mit den Daten ausgefüllt, vor dem Aufruf der Prozedur, auch der Schlüssel ist ein string, der entweder ein hash-digest oder eine einfache Taste, je nachdem, wie die Daten verschlüsselt waren.
warum wird eine hash erforderlich ist, dass ich glaube, es ist um die Sicherheit zu erhöhen, so dass es schwierig für Hacker zu entschlüsseln dieser Daten.