blowfish decryption ?



  • Hallo,

    meine aufgabe ist es einen verschlüsselten string(CFB MODE) zu entschlüsseln.

    ich muss sagen ich bin relativ verwirrt, ich war auf verschiedenen seiten doch, es wird immer etwas unterschiedlich gemacht. außerdem konnte ich bisher noch keinen code kompilieren.
    http://www.codeproject.com/KB/security/blowfish.aspx

    wenn ich einen string entsclüsseln will, brauche ich da nicht eigentlich den key mit dem er verschlüsselt wurde?

    also nur mal zum verständis

    als erstes inlcude ich den bowfish header

    #inlcude "blowfish.h"
    

    Dann brauche ich doch erstmal den key? und natürlich den verschlüsselten string, der warum auch immer in eine char array gespeichert werden muss.

    CBlowFish oBlowFish((unsigned char*)"KeyDenIchBrauche", 16);
      char szDataIn1[49] = "ËcÙ«gËk‰VþB&E JîVúŸÝWaÁýʽTl‰½![ªÃÝ÷8fQ¿@-߀ë[2\¥ÇÎuxI42±’­CHà,8ï";
      char szDataIn[49];
      char szDataOut[49];
      memset(szDataIn, 0, 49);
      memset(szDataOut, 0, 49);
    

    und damit lasse ich ihn dann entschlüsseln?

    memset(szDataIn, 0, 49);
      oBlowFish.ResetChain();
      oBlowFish.Decrypt((unsigned char*)szDataOut, 
                        (unsigned char*)szDataIn, 48, CBlowFish::CFB);
    


  • ist die aufgabe nicht eher, ihn selber zu schreiben, den algorithmus?
    ist ähnlich dem feistel..

    siehe hier:
    http://de.wikipedia.org/wiki/Blowfish#Funktionsweise
    da steht genau beschrieben, wie blowfish funktioniert.



  • meeydoo schrieb:

    wenn ich einen string entsclüsseln will, brauche ich da nicht eigentlich den key mit dem er verschlüsselt wurde?

    Ist zwar keine C++ Frage, aber das weiß ich trotzdem: Ja.

    meeydoo schrieb:

    ...in eine char array gespeichert werden muss.

    BlowFish arbeitet (wie auch alle anderen vernünftigen Blockchiffren) binär. Das beißt sich ein bisschen mit C-Zeichenketten. Dein Sonderzeichensalat ist Pfui.

    meeydoo schrieb:

    und damit lasse ich ihn dann entschlüsseln?

    Möglicherweise. RTFM würde ich mal sagen.

    Hast Du auch eine C++ Frage?



  • ich wusste nicht das ich im falschen forum bin 😕

    meine aufgabe ist es diesen string "Ë cÙ«gËk‰VþB&E JîVúŸÝWaÁýʽTl‰½![ªÃÝ÷8fQ¿@-߀ë[2\¥ÇÎuxI42±’­CHà,8ï" in was lesbares umzuwandeln. ich weiß nur das ich blowfish und cfb benutzen muss 😞 aber einen key habe ich nicht !



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    meeydoo schrieb:

    ich weiß nur das ich blowfish und cfb benutzen muss 😞 aber einen key habe ich nicht !

    Die Wunder der Cloud helfen! Du brauchst bloß eine verteilte Brute-Force Atacke programmieren (das ist recht einfach, wir können helfen). Dann mietest du die gesamten Weltressourcen an Computerzeit an. In 1000 bis 1000000 Jahren hast du deinen Klartext.



  • SeppJ schrieb:

    meeydoo schrieb:

    ich weiß nur das ich blowfish und cfb benutzen muss 😞 aber einen key habe ich nicht !

    Die Wunder der Cloud helfen! Du brauchst bloß eine verteilte Brute-Force Atacke programmieren (das ist recht einfach, wir können helfen). Dann mietest du die gesamten Weltressourcen an Computerzeit an. In 1000 bis 1000000 Jahren hast du deinen Klartext.

    klingt gut, wann fangen wir an 🙂 ?

    nein ich habe in meinen unterlagen doch noch den key gefunden. 😞
    muss ich also doch noch was arbeiten.

    ps: ich hätte nicht gedacht der verschlüsselte key so sicher ist o.O


  • Mod

    meeydoo schrieb:

    ps: ich hätte nicht gedacht der verschlüsselte key so sicher ist o.O

    Sonst wär's reichlich sinnlos, oder? Blowfish ist keine Kindergartenverschlüsselung.



  • gibt es keine c++ lib für blowfish? ich muss immer .h datein einfügen die von anderen c++ programmieren geschrieben worden sind.
    ich bekomme es einfach nicht kompiliert

    #include "Blowfish.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    
      CBlowFish oBlowFish((unsigned char*)"1234567890123456", 16);
      char szDataIn[49] = "ababababccccccccababababccccccccababababcccccccc";
      char szDataOut[49];
      memset(szDataIn, 0, 49);
      memset(szDataOut, 0, 49);
    
      oBlowFish.ResetChain();
      oBlowFish.Decrypt((unsigned char*)szDataOut,
                        (unsigned char*)szDataIn, 48, CBlowFish::CFB);
    
    }
    

    als erstes habe ich den fehler bekommen das im header size_t nicht definiert wurde, also habe ich mal gegoogled und cstring included und siehe da die meisten fehler meldungen sind weg.
    doch nun bekomme ich folgende fehlermeldungen
    Alle informationen habe ich von http://www.codeproject.com/KB/security/blowfish.aspx oder http://www.schneier.com/blowfish-download.html

    C:\Users\kanta\Desktop\Blowfish\ttest.o:ttest.cpp:(.text.startup+0x5f): undefined reference to `CBlowFish::CBlowFish(unsigned char*, unsigned int, SBlock const&)'
    C:\Users\kanta\Desktop\Blowfish\ttest.o:ttest.cpp:(.text.startup+0xb2): undefined reference to `CBlowFish::Decrypt(unsigned char const*, unsigned char*, unsigned int, int)'
    

    das header file sieht so aus :

    #include <cstring>
    #ifndef __BLOWFISH_H__
    #define __BLOWFISH_H__
    
    //Block Structure
    struct SBlock
    {
    	//Constructors
    	SBlock(unsigned int l=0, unsigned int r=0) : m_uil(l), m_uir(r) {}
    	//Copy Constructor
    	SBlock(const SBlock& roBlock) : m_uil(roBlock.m_uil), m_uir(roBlock.m_uir) {}
    	SBlock& operator^=(SBlock& b) { m_uil ^= b.m_uil; m_uir ^= b.m_uir; return *this; }
    	unsigned int m_uil, m_uir;
    };
    
    class CBlowFish
    {
    public:
    	enum { ECB=0, CBC=1, CFB=2 };
    
    	//Constructor - Initialize the P and S boxes for a given Key
    	CBlowFish(unsigned char* ucKey, size_t n, const SBlock& roChain = SBlock(0UL,0UL));
    
    	//Resetting the chaining block
    	void ResetChain() { m_oChain = m_oChain0; }
    
    	// Encrypt/Decrypt Buffer in Place
    	void Encrypt(unsigned char* buf, size_t n, int iMode=ECB);
    	void Decrypt(unsigned char* buf, size_t n, int iMode=ECB);
    
    	// Encrypt/Decrypt from Input Buffer to Output Buffer
    	void Encrypt(const unsigned char* in, unsigned char* out, size_t n, int iMode=ECB);
    	void Decrypt(const unsigned char* in, unsigned char* out, size_t n, int iMode=ECB);
    
    //Private Functions
    private:
    	unsigned int F(unsigned int ui);
    	void Encrypt(SBlock&);
    	void Decrypt(SBlock&);
    
    private:
    	//The Initialization Vector, by default {0, 0}
    	SBlock m_oChain0;
    	SBlock m_oChain;
    	unsigned int m_auiP[18];
    	unsigned int m_auiS[4][256];
    	static const unsigned int scm_auiInitP[18];
    	static const unsigned int scm_auiInitS[4][256];
    };
    
    //Extract low order byte
    inline unsigned char Byte(unsigned int ui)
    {
    	return (unsigned char)(ui & 0xff);
    }
    
    //Function F
    inline unsigned int CBlowFish::F(unsigned int ui)
    {
    	return ((m_auiS[0][Byte(ui>>24)] + m_auiS[1][Byte(ui>>16)]) ^ m_auiS[2][Byte(ui>>8)]) + m_auiS[3][Byte(ui)];
    }
    
    #endif // __BLOWFISH_H__
    


  • meeydoo schrieb:

    C:\Users\kanta\Desktop\Blowfish\ttest.o:ttest.cpp:(.text.startup+0x5f): undefined reference to `CBlowFish::CBlowFish(unsigned char*, unsigned int, SBlock const&)'
    C:\Users\kanta\Desktop\Blowfish\ttest.o:ttest.cpp:(.text.startup+0xb2): undefined reference to `CBlowFish::Decrypt(unsigned char const*, unsigned char*, unsigned int, int)'
    

    Ähh, ne Blowfish.cpp gibts bei dir?! Oder wo stehen die Definitionen?



  • ah okay lol im beispiel programm wurde die .cpp datei garnicht included

    ja jetzt macht es schon mehr sinn

    trotzdem meckert er noch über die keylength, aber das bekomme ich bestimmt noch irgentwie alleine hin

    danke!



  • meeydoo schrieb:

    ah okay lol im beispiel programm wurde die .cpp datei garnicht included

    Das macht man auch nicht. Die sollst Du nämlich separat kompilieren und dazu "linken" -- nicht inkludieren!

    Dir scheinen wirklich wichtige Grundlagen zu fehlen. Lern Doch erstmal C++. Solche Basics hier runtergebetet zu bekommen, kannst Du nicht erwarten, da so'was immer viel besser in schlauen Büchern erklärt steht. Es ist Deine Aufgabe, Dich erst mal selbst mit diesen Grundlagen zu beschäftigen.



  • ja ich bin immernoch die basics am lesen. ich dachte nur das ich mal irgentwas praktisches nebenbei mache, leider hatte ich das kapitel linker etc noch nicht. vieleicht werde ich mal ein paar kapitel überspringen



  • ----------



  • okay ich weiß nun wie ich dateien linke.
    allerdings habe ich eine bitte

    auf der seite

    http://www.codeproject.com/KB/security/blowfish.aspx

    gibt es "beispiele" könnt ihr diese kompilieren? ich bekomme soviele fehlermeldungen das ich garnicht weiß wo ich anfangen soll. 😞

    bzw habt ihr vielleicht eine quelle wo ich kompilierbare beispiele herbekomme ? suche schon seit tagen, leider ohne erfolg.


  • Mod

    meeydoo schrieb:

    gibt es "beispiele" könnt ihr diese kompilieren?

    Ich mag nicht extra einen Account dafür anlegen.

    ich bekomme soviele fehlermeldungen das ich garnicht weiß wo ich anfangen soll. 😞

    Wenn ich mal raten darf, dann würde ich sagen, dass du nicht in der Lage bist, diese (unvollständigen) Codebeispiele zu einem vollständigen Programm zu ergänzen.

    Bevor man Fremdbibliotheken benutzen kann, muss man erst einmal die Grundlagen beherrschen.



  • SeppJ schrieb:

    meeydoo schrieb:

    gibt es "beispiele" könnt ihr diese kompilieren?

    Ich mag nicht extra einen Account dafür anlegen.

    ich bekomme soviele fehlermeldungen das ich garnicht weiß wo ich anfangen soll. 😞

    Wenn ich mal raten darf, dann würde ich sagen, dass du nicht in der Lage bist, diese (unvollständigen) Codebeispiele zu einem vollständigen Programm zu ergänzen.

    Bevor man Fremdbibliotheken benutzen kann, muss man erst einmal die Grundlagen beherrschen.

    wahrscheinlich hast du recht, ich dachte nur das es ein vollständiges beispiel ist, was aber wohl nicht der fall ist 😕


  • Mod

    meeydoo schrieb:

    wahrscheinlich hast du recht, ich dachte nur das es ein vollständiges beispiel ist, was aber wohl nicht der fall ist 😕

    Soweit ich das sehe, ist es auch vollständig für jede vernünftige Definition von vollständig. Aber dies gilt nicht mehr, falls man nicht in der Lage ist, das Basis-Drumherum wie eine main-Funktion und passende Header zu ergänzen und noch damit kämpft, wie man überhaupt mit mehreren Dateien umgeht.

    Tut mir leid, dass ich dir ohne die Bibliothek selber nicht konkreter helfen kann.



  • SeppJ schrieb:

    meeydoo schrieb:

    wahrscheinlich hast du recht, ich dachte nur das es ein vollständiges beispiel ist, was aber wohl nicht der fall ist 😕

    Soweit ich das sehe, ist es auch vollständig für jede vernünftige Definition von vollständig. Aber dies gilt nicht mehr, falls man nicht in der Lage ist, das Basis-Drumherum wie eine main-Funktion und passende Header zu ergänzen und noch damit kämpft, wie man überhaupt mit mehreren Dateien umgeht.

    Tut mir leid, dass ich dir ohne die Bibliothek selber nicht konkreter helfen kann.

    kein problem, ich werde mich die tage mal intensiver mit blowfish auseinander setzen. vielleicht bekomme ich es ja alleine hin.


  • Mod

    meeydoo schrieb:

    kein problem, ich werde mich die tage mal intensiver mit blowfish auseinander setzen. vielleicht bekomme ich es ja alleine hin.

    Eben nicht. Da hilft es dir gar nichts, mit Blowfish umzugehen. Du bist einfach noch nicht so weit, selbstständig fremde Bibliotheken zu benutzen und Beispiele zu verstehen. Einfach nur Copy&Paste&Abändern reicht beim Programmieren nicht.


Anmelden zum Antworten