Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Behind the Scenes
  3. Wiki Discussion
  4. New SimpleCrypt page
QtWS25 Last Chance

New SimpleCrypt page

Scheduled Pinned Locked Moved Wiki Discussion
98 Posts 26 Posters 85.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    goetz
    wrote on last edited by
    #14

    If you miss the documentation tools discussion: I've split it out to a "new thread":http://developer.qt.nokia.com/forums/viewthread/4619/

    http://www.catb.org/~esr/faqs/smart-questions.html

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andre
      wrote on last edited by
      #15

      I have added a "separate page":http://developer.qt.nokia.com/wiki/SimpleCrypt_algorithm_details that details the algorithm and the layout of the cypher text. Of course, I also added a link from the main page.

      1 Reply Last reply
      0
      • P Offline
        P Offline
        paucoma
        wrote on last edited by
        #16

        Hi Andre,
        First: Thanks for sharing the code.

        Second: You've got some typos in the Example usage code.

        • Name of the Class: SimpleCypt --> SimpleCrypt
        • crypto.setCompression(SimpleCrypto::CompressionAlways)
          ** crypto.setCompressionMode(SimpleCrypt::CompressionAlways);
        • crypto.setIntegrityProtection(SimpleCrypto::ProtectHash);
          ** crypto.setIntegrityProtectionMode(SimpleCrypt::ProtectionHash);
        • SimpleCrypt.ErrorNoError --> SimpleCrypt::ErrorNoError

        Third:
        The String Encryption and Decryption works fine, but for the binary version I seem to be having some difficulties.

        my main.cpp
        @
        #include "simplecrypt.h"

        #include <QString>
        #include <QDebug>
        #include <QBuffer>
        #include <QDataStream>

        int main(){
        QString txStr = "Hello world!";

        SimpleCrypt crypto(Q_UINT64_C(0x7F29B208)); //some random number
        // crypto.setCompressionMode(SimpleCrypt::CompressionAlways);
        // crypto.setIntegrityProtectionMode(SimpleCrypt::ProtectionHash);
        QBuffer txB;
        QDataStream s(&txB);
        s << txStr;

        QByteArray cypherBytes = crypto.encryptToByteArray(txB.data());
        if (crypto.lastError() == SimpleCrypt::ErrorNoError) {
        qDebug() << cypherBytes;
        }

        SimpleCrypt cryptu(Q_UINT64_C(0x7F29B208)); //some random number
        QByteArray plainBytes = cryptu.decryptToByteArray(cypherBytes);
        if (!cryptu.lastError() == SimpleCrypt::ErrorNoError) {
        qDebug() << "decrypt error";
        return 0;
        }
        qDebug() << plainBytes;

        QString rxStr;
        QBuffer rxB(&plainBytes);
        QDataStream rs(&rxB);
        rs >> rxStr;
        qDebug() << rxStr;
        return 0;
        }
        @

        My Output (console):

        "??Sß+"
        ""
        ""

        What have I missed or using incorrectly?

        Thanks again for the contribution.

        1 Reply Last reply
        0
        • P Offline
          P Offline
          paucoma
          wrote on last edited by
          #17

          So I've played a bit around I've come to the conclusion that I'm using QDataStream incorrectly.

          My Test Code: main.cpp
          @
          #include <QString>
          #include <QDebug>
          #include <QBuffer>
          #include <QDataStream>
          int main(){
          QString txStr = "Hello world!";
          QString rxStr;

          QBuffer txB;
          txB.open(QIODevice::ReadWrite);
          QDataStream s(&txB);
          qDebug() << txB.size();
          s << txStr;
          qDebug() << txB.size();
          s >> rxStr;
          qDebug() << rxStr;
          return 0;
          }
          @

          My Output:
          0
          28
          ""

          So the buffer is being filled but not correctly being read out.. why not?

          1 Reply Last reply
          0
          • G Offline
            G Offline
            giesbert
            wrote on last edited by
            #18

            That's an easy question. Your problem is the stream position:

            you write to the stream, then start reading after the written bytes :-)

            try out the following:

            @
            #include <QString>
            #include <QDebug>
            #include <QBuffer>
            #include <QDataStream>
            int main()
            {
            QString txStr = "Hello world!";
            QString rxStr;

            QBuffer txB;
            txB.open(QIODevice::WriteOnly);
            QDataStream s(&txB);
            qDebug() << txB.size();
            s << txStr;
            qDebug() << txB.size();
            txB.close(); // sets stream position to 0 !!!
            
            txB.open(QIODevice::ReadOnly);
            QDataStream s2(&txB);
            s2 >> rxStr;
            qDebug() << rxStr;
            return 0;
            

            }
            @

            or use a seek in between

            @
            #include <QString>
            #include <QDebug>
            #include <QBuffer>
            #include <QDataStream>
            int main()
            {
            QString txStr = "Hello world!";
            QString rxStr;

            QBuffer txB;
            txB.open(QIODevice::WriteOnly);
            QDataStream s(&txB);
            qDebug() << txB.size();
            s << txStr;
            qDebug() << txB.size();
            txB.seek(0); // sets stream position to 0 !!!
            s >> rxStr;
            qDebug() << rxStr;
            return 0;
            

            }
            @

            I did not compile the code, so it might contain typos

            Nokia Certified Qt Specialist.
            Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

            1 Reply Last reply
            0
            • P Offline
              P Offline
              paucoma
              wrote on last edited by
              #19

              Aha, got it all sorted out, thanks

              I had my suspicions on that, but thought that the "<<" and ">>" operators may use seperate index variables.

              Andre: it would be great if you could incorporate in the Example usage code the following so it works out of the box.

              @
              buffer.open(QIODevice::WriteOnly);
              buffer.close();
              buffer.open(QIODevice::ReadOnly);
              @

              Because newbies like myself:

              • copy + paste + compile
                ** if it works -> adapt to needs
                ** if it doesn't -> get lost in the simplest things

              Although I must admit that I am learning loads of things through all these problems I get myself into.

              Gerolf: Once again thanks for your quick and effective response.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #20

                paucoma, thank you for your comments and suggestions. I have changed the wiki page accordingly. I am glad you solved the problem, and that it turned out the class itself was not at fault ;-)

                I must admit that I wrote the examples directly in the wiki page, and thats when errors like these happen. Sorry about that! I hope the current version is more managable? Note that I was talking about "at the other end", implying that the decryption code was not meant to be used in the same function (and thus, implicitly, with the same buffer).

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  paucoma
                  wrote on last edited by
                  #21

                  Thanks Andre for making the modifications.

                  I have corrected myself a few other details I found.

                  P.S. I didn't know that I had such a priviledge.

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    andre
                    wrote on last edited by
                    #22

                    Thanks for your effort, I really appreciate it. If you want, you're welcome to update it yourself in the wiki article :-)

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      giesbert
                      wrote on last edited by
                      #23

                      Hi Andre,

                      one suggestion to the wiki page:
                      In the section SimpleCrypt in use it would be nice to have a list of the encryp/decrypt functions. You state thete are two times 4, but not the names :-)
                      this means searching inside the code :-)

                      The rest sound really god. Thanks for the article.

                      Nokia Certified Qt Specialist.
                      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andre
                        wrote on last edited by
                        #24

                        [quote author="Gerolf" date="1300958192"]Hi Andre,

                        one suggestion to the wiki page:
                        In the section SimpleCrypt in use it would be nice to have a list of the encryp/decrypt functions. You state thete are two times 4, but not the names :-)
                        this means searching inside the code :-)

                        The rest sound really god. Thanks for the article.[/quote]

                        Fair enough, done. :-)

                        Thanks for the praise.

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          giesbert
                          wrote on last edited by
                          #25

                          Hi Andre,

                          I'm currently reading your second article, and found the following "here":http://developer.qt.nokia.com/wiki/SimpleCrypt_algorithm_details#00f4e5788aab6d3546bb433842dbbefc :

                          bq. The payload data block’s contents are encrypted with a four byte (quint64) key.

                          quint64 is a 64 bit integer, which means 8 byte.

                          so also in the snipet page, you say:

                          @
                          SimpleCrypt crypto(Q_UINT64_C(0x7F29B208)); //some random number
                          @

                          this is just a 32 bit number, not 64 bit.

                          @
                          void SimpleCrypt::splitKey()
                          {
                          m_keyParts.clear();
                          m_keyParts.resize(4);
                          for (int i=0;i<4;i++) {
                          quint64 part = m_key;
                          for (int j=i; j>0; j--)
                          part = part >> 8;
                          part = part & 0xff;
                          m_keyParts[i] = static_cast<char>(part);
                          }
                          }
                          @

                          this also only uses 4 bytes, not 8.

                          Nokia Certified Qt Specialist.
                          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                          1 Reply Last reply
                          0
                          • G Offline
                            G Offline
                            giesbert
                            wrote on last edited by
                            #26

                            some additional topics:

                            in "Decrypted payload":http://developer.qt.nokia.com/wiki/SimpleCrypt_algorithm_details#2d478ba9ee3cf03e338b506b1a0292dc

                            SH1 and CRC have the same description:

                            bq. In case the Protection Checksum flag has been set, the layout of the decrypted payload looks like this:

                            I think this is just a copy paste error.

                            As I'm through now, no more things :-)
                            Very good article, interesting to read. Thanks.

                            Nokia Certified Qt Specialist.
                            Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              andre
                              wrote on last edited by
                              #27

                              Thank you very much for this catch, Gerolf! You are absolutely right, and this is a big mistake in the algorithm as well. I will take care of fixing this ASAP.

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                andre
                                wrote on last edited by
                                #28

                                OK, fixed on both pages. Very embarrassing, I must say. :(

                                1 Reply Last reply
                                0
                                • G Offline
                                  G Offline
                                  giesbert
                                  wrote on last edited by
                                  #29

                                  Now it looks good, thanks :-)

                                  Nokia Certified Qt Specialist.
                                  Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                                  1 Reply Last reply
                                  0
                                  • L Offline
                                    L Offline
                                    luca
                                    wrote on last edited by
                                    #30

                                    I tried today SimpleCrypt class and it was very useful.

                                    Thanks!

                                    1 Reply Last reply
                                    0
                                    • A Offline
                                      A Offline
                                      andre
                                      wrote on last edited by
                                      #31

                                      Glad you like it!

                                      1 Reply Last reply
                                      0
                                      • C Offline
                                        C Offline
                                        cincirin
                                        wrote on last edited by
                                        #32

                                        Hi Andre.
                                        First of all, thanks for sharing your code. :-)

                                        I was playing with this algorithm, but I noticed a strange situation: sometimes these work well, sometimes not.

                                        This is the string which I have tested :
                                        10197016915918185882701231384169178913312058269-10750535699546572956586080750006397
                                        The key is: 13775729

                                        I tested both with string and binary data (there are several integer values).

                                        So if I encrypt this string, and then decrypt it, sometimes original string is equal with decrypted string, sometimes differ.

                                        1 Reply Last reply
                                        0
                                        • A Offline
                                          A Offline
                                          andre
                                          wrote on last edited by
                                          #33

                                          You'll have to provide a small testprogram that shows the problem, otherwise I can not help you debug the issue.

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved