Название: [Решено] Шифрование QString (XOR) Отправлено: JamS007 от Май 03, 2010, 21:57 Здравствуйте,
Знаю, то банально, можете меня пинать, но я уже извелся... Сегодня целый день потратил на поиски варианта xor-a над QString. вот что нашел: Код: QString xorStr(QString str) Признаю, это детский вопрос, но все-же... функция работает нормально, но только с латинскими символами... русские вообще не признает... Она их кодирует, но обратный процес не получаеться... Тыкните пальцем, где ошибка... Название: Re: Xor QString Отправлено: Sancho_s_rancho от Май 03, 2010, 22:30 Я не совсем понял вашу затею. Лучше бы услышать предисторию и то, что вам необходимо получить в итоге.
То, что я вижу сейчас. Байту(символу) Ascii вы делаете Далее вы создаете юникодный QChar. До 128 (или 127) ascii как соответсвует юникоду, а дальше нет. но даже если бы там была кириллица(типа koi8-r), то юникодному номеру символы все-равно бы не соответствовали. Название: Re: Xor QString Отправлено: zenden от Май 03, 2010, 22:40 всё это мне не нравится, но я предлагаю использовать .unicode() вместо toAscii()
Код: retStr[i] = QChar(str.at(i).unicode() ^ key); Название: Re: Xor QString Отправлено: Sancho_s_rancho от Май 03, 2010, 22:49 Да. Либо Метод unicode использовать, он возвращает юникодный номер (тип ushort , 16-битное беззнаковое) и над ним глумится.
Или использовать QTextCodec::codecForName(), устанавливать 8-битный кодек содержащий символы кириллицы (ну там вынь 1251 или кои8-р), проверять имеет ли эта кодовая таблица этот символ через QTextCodec::canEncode(QChar(....)) и играть в эти игры с байтом. Название: Re: Xor QString Отправлено: JamS007 от Май 03, 2010, 22:57 Мне нужно закодировать несколько строк QString от чужих глаз. (Они будут записаны в файл) Особо умных методов мне не надо, так как программа не большой важности, да и как я их закодировал буду знать только я.
Очень-очень желательно, чтоб строки кодировались и раскодировались как на Unix так и на Windows. Причем нужна совместимость, например, строка закодированная на юниксе должна быть читаемой на винде, и наоборот. В шифровании данных я новичок. Никогда не приходилось этого делать, до сегодня. Поэтому допускаю грубые ошибки, признаю. Метод ХОR выбрал как самый легкий из всех. Если есть идеи как это сделать - пишите, я буду очень рад почитать, да и, думаю, не только я.... Название: Re: Xor QString Отправлено: zenden от Май 03, 2010, 23:35 Я не думаю, что стоит хранить бинарные данные в QString. Для таких целей существует QByteArray. Тем более что потом эти данные надо будет выводить в файл (скорее всего текстовый)
Предлагаю использовать 2 функции - шифрования и дешифрования, а зашифрованные данные, закодированные в Base64, хранить в строке . Уверен, что это будет работать на любой системе и между системами, потому что Utf8 есть везде. Код
Название: Re: Xor QString Отправлено: JamS007 от Май 03, 2010, 23:53 Хорошо, я понял.
А теперь, поясните, если можно, как работать с такой строкой в разных системах? На выходе я получу строку в UTF-8 (Если я правильно понял), как мне ее использовать? Как мне ее показать на линукс и виндос, так, что бы она и там, и там была читаемой? Название: Re: Xor QString Отправлено: zenden от Май 04, 2010, 00:09 Шифруете первоначальную строку с помощью encodeStr(), получается некая строка вида "64TrheuK647rj+uL", пишете её в файл.
Когда надо - читаете из файла зашифрованную строку ("64TrheuK647rj+uL"), дешифруете с помощью decodeStr(), получается первоначальная строка, отображаете её. она будет читаемая. Название: Re: Xor QString Отправлено: JamS007 от Май 04, 2010, 11:10 Спасибо всем!
|