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
Forum Updated to NodeBB v4.3 + New Features

New SimpleCrypt page

Scheduled Pinned Locked Moved Wiki Discussion
98 Posts 26 Posters 96.4k Views 1 Watching
  • 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