Текущий архив: 2007.10.14;
Скачать: CL | DM;
Вниз
XOR алгоритм Найти похожие ветки
← →
Anatoly Podgoretsky © (2007-09-17 13:24) [40]> Denis_ (17.09.2007 12:53:37) [37]
Уже привлек
Угрожаешь :-)
← →
Anatoly Podgoretsky © (2007-09-17 13:34) [41]
> Denis_ © (17.09.07 13:20) [38]
Символы #0 не мешают.
А если мешают, то должны мешать и некоторые другие непечатные символы.
По моему уже не раз сказали, не использовать результат шифрации в текстовых функциях и визуальных контролах. Если надо куда то передавать, за пределы строки, то надо преобразовать в одну из транспортных кодировок и это будет универсально для любого алгоритма шифрации.
← →
Denis_ © (2007-09-17 13:43) [42]
> Уже привлек
Но не как модератора, ведь так?:)
> то надо преобразовать в одну из транспортных кодировок
C этого места поподробней бы...:)
А я подумал, что 0 xor x = 0. Поэтому он и "мешает". Это не так?
← →
Инс © (2007-09-17 13:49) [43]
> C этого места поподробней бы...:)
Как опять???? Анатолий, повторим? Или может автор почитает обсуждение. :)
← →
Инс © (2007-09-17 13:51) [44]0 xor x = x, проверяется же элементарно :) Да и табличку истинности знать надо бы.
← →
Anatoly Podgoretsky © (2007-09-17 13:53) [45]> Denis_ (17.09.2007 13:43:42) [42]
Base64, Hex
← →
Denis_ © (2007-09-17 13:55) [46]
> в одну из транспортных кодировок
Да, я не знаю, что это такое. Так вы и не говорили про них.Просто упоминали.0 xor x = x,честно, не проверял. Думал, что равно "0".
← →
Denis_ © (2007-09-17 13:56) [47]
> Base64, Hex
А как их использовать?
← →
{RASkov} © (2007-09-17 13:57) [48]> [47] Denis_ © (17.09.07 13:56)
См [39]
← →
{RASkov} © (2007-09-17 13:58) [49]Там не Base64, но Hex.
← →
Denis_ © (2007-09-17 13:58) [50]Попытался написать
var
b : Base64;
h : Hex;
:(
Как они используются?
← →
Anatoly Podgoretsky © (2007-09-17 13:59) [51]> Denis_ (17.09.2007 13:55:46) [46]
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html&file_id=app-bits
← →
Anatoly Podgoretsky © (2007-09-17 13:59) [52]> Denis_ (17.09.2007 13:56:47) [47]
Смотри IntToHex
← →
Инс © (2007-09-17 13:59) [53]BinToHex, хотя бы
← →
Denis_ © (2007-09-17 14:00) [54]
> {RASkov} © (17.09.07 13:57) [48]
Но там же результат тоже стринг!
← →
Denis_ © (2007-09-17 14:01) [55]
> Anatoly Podgoretsky © (17.09.07 13:59) [51]
> Инс © (17.09.07 13:59) [53]
> BinToHex, хотя бы
Спасибо за это!
← →
Denis_ © (2007-09-17 14:02) [56]Особенно за http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html&file_id=app-bits
Спасибо!
← →
Anatoly Podgoretsky © (2007-09-17 14:03) [57]> Инс (17.09.2007 13:59:53) [53]
Можно, для понимания посмотреть обе.
← →
Инс © (2007-09-17 14:03) [58]
> Denis_ © (17.09.07 14:02) [56]
Такие вещи знать нужно, без этого ты не программист...
← →
Инс © (2007-09-17 14:06) [59]
> Anatoly Podgoretsky © (17.09.07 14:03) [57]
:))) Вспомнилось...<mad_enot> народ посоветуйте антивирус хороший
<PinDOS> каспер
<Jekel> nod32
<Distortion_Finger{Bumer}> аваст
<mad_enot> эээ
<mad_enot> так всётаки?
<Distortion_Finger{Bumer}> аваст
<Jekel> nod32
<PinDOS> каспер
← →
Denis_ © (2007-09-17 14:08) [60]
> Можно, для понимания посмотреть обе.
Буду разбираться с информацией по Вашей ссылке.
← →
{RASkov} © (2007-09-17 14:11) [61]> [54] Denis_ © (17.09.07 14:00)
> Но там же результат тоже стринг!
Но там нет "проблем" с #0 :)
← →
Anatoly Podgoretsky © (2007-09-17 14:18) [62]> {RASkov} (17.09.2007 14:11:01) [61]
Ну достаточно про #0 это же не единственная проблема. Смотреть глубже, системно.
← →
Denis_ © (2007-09-17 14:45) [63]вот тут обсуждение в асе.Как сказал Инс, может кому интересно будет.
Denis (04:21 PM) :
а что такое base64?(чувствуя себя полным идиотом)
Ins (04:21 PM) :
а погуглить?;)
Denis (04:21 PM) :
да, точно.
Denis (04:24 PM) :
то есть Base64 - тоже строка? Как представление числа в 64-ричной системе?
Ins (04:25 PM) :
не совсем. Это определенный алгоритм кодирования (не путать с шифрованием) двоичного буфера, с целью чтобы в результате получились только печатные символы, которые можно вывести в любой текстовый приемник (Edit, Memo)
Denis (04:26 PM) :
на выходе получим строку?
Ins (04:26 PM) :
ну да
Denis (04:27 PM) :
т.е. если засунуть туда к примеру #13, то получим какой-либо печатный символ?
Ins (04:27 PM) :
да, даже два, а точнее полтора:)
Denis (04:28 PM) :
Это ещё как? Результат меньше чем первоначальное выражение, да?
Ins (04:29 PM) :
наоборот, больше. Еще точнее в 1.33333 раза.
Ins (04:29 PM) :
смотри
Ins (04:29 PM) :
в символе - 8 бит
Denis (04:29 PM) :
ага.
Ins (04:30 PM) :
Base64 берет только 6 бит и переводит их в соотв. своей таблице символ. А остальные два бита переносятся на следующий символ шифртекста. В следующей итерации будет взято 2 бита первого символа и 4 бита второго. и т.д.
Denis (04:31 PM) :
и всё это толко дя того, чтобы выводить в мемо/едит/...?
Ins (04:31 PM) :
получается более компактная строка, но алгоритм сложнее
Ins (04:31 PM) :
ну да
Ins (04:31 PM) :
я писал в обсуждении [29] кажется, где это применяется
Denis (04:33 PM) :
ясно.А как реализовать? с помощью IntToHex и BinToHex?
Ins (04:33 PM) :
с помощью них - никак. Зато можно ручками :) А можно поискать готовую реализацию
Denis (04:34 PM) :
Ну, я просто подумал, что вы там на форуме меня наталкивали на это.
Ins (04:34 PM) :
Это функции для перевода в HEX
Denis (04:35 PM) :
Это до меня дошло.
Ins (04:35 PM) :
так в чем проблема то?
Denis (04:35 PM) :
Я вот не знаю, как биты получать.
Ins (04:35 PM) :
Воооот, Анатолий ссылочку дал
Denis (04:36 PM) :
ну я так просмотрел по быстрому. ничего не читая. Сохранил на комп. Буду разбираться.Там есть про биты?
Ins (04:38 PM) :
есть. Можно наше обсуждение скопировать в форум, многим полезно будет.
← →
{RASkov} © (2007-09-17 14:49) [64]> Там есть про биты?
:)))
Там вся статья про них...:)
← →
Denis_ © (2007-09-18 13:14) [65]
> {RASkov} © (17.09.07 14:49) [64]
> > Там есть про биты?
>
> :)))
> Там вся статья про них...:)
Начал читать. Анатолию ещё раз спааибо.
← →
Denis_ © (2007-09-18 19:28) [66]
> Начал читать
И сразу появились вопросы:((( Например, как получить значение бита по номеру?
В разделе "Получение позиции бита или его значения" непонятно как-то написано, нечего конкретного. 1 shl N даёт 2^N , а что дальше делать?
Хочу сделать перевод в Base64 так
1) получить все биты ,записать их в строку "11000010010001....."
2) из этой строки брать по 6 бит и ставить им в соответствие какой-либо печатный символ
3)вывести эту строку.
если есть замечания, прошу!
← →
Zeqfreed © (2007-09-18 19:54) [67]> Denis_ © (18.09.07 19:28) [66]
> 1) получить все биты ,записать их в строку "11000010010001.
> ...."
Лучше так не делать, а делать сразу по-человечески. Для затравки дам такой код:function getBits(n : Byte) : String;
begin
Result := "";
repeat
if (n and $80 = $80) then
Result := Result + "1"
else
Result := Result + "0";
n := n shl 1;
until (n = 0);
while (length(Result) < 8) do
Result := Result + "0";
end;
В строчкеif (n and $80 = $80) then
мы проверяем, установлен ли старший бит.
В строчкеn := n shl 1;
сдвигаем все биты на позицию влево. Старший бит пропадает, а шестой становится на его место. Так можно получить значения всех битов по очереди.
← →
Denis_ © (2007-09-18 20:12) [68]
> Zeqfreed © (18.09.07 19:54) [67]
Спасибо!
Я уж почти разобрался. А ещё : как лучше подставлять символы под 6 бит?
например
000001 соответствует "A" и т.п.?
И вообще, как сделать [66] по человечески?:).(т.е. как ещё улучшить мой алгоритм?)
← →
Anatoly Podgoretsky © (2007-09-18 20:14) [69]> Zeqfreed (18.09.2007 19:54:07) [67]
N and 1 or $30
← →
Denis_ © (2007-09-18 20:17) [70]
> N and 1 or $30
А это что сделает? Анатолий, я просто не понял в Ваше й статье момент один
Получение позиции бита или его значения
1 shl N
В данном примере единица сдвигается влево на нужное количество разрядов, и в результате получаем двоичное значение, равное 2^N, где в установлен один единственный бит, соответствующий разряду числа. Этот прием может использоваться с переменной для расчета позиции во время выполнения или во время компиляции, во втором случае код генерироваться не будет, а компилятор просто рассчитает значение и подставит его в программу, не генерируя дополнительного кода. Это удобно для указания номера бита, не представляя его в виде десятичной или шестнадцатеричной константы. Но чаще бывает удобнее использовать именованные константы, поскольку они более информативны, примеры этого будут приведены в конце статьи.
как получить значение не написано...:) А я так надеялся на это:). Разьясните,а?
← →
Denis_ © (2007-09-18 20:25) [71]
> Zeqfreed © (18.09.07 19:54) [67]
Кстати , что-то подобное Вашему коду я и имел в виду под
> 1) получить все биты ,записать их в строку "11000010010001.
> ...."
:)))
← →
Anatoly Podgoretsky © (2007-09-18 20:30) [72]> Denis_ (18.09.2007 20:17:10) [70]
Вместо кучи команд по преобразованию бита - одна единственная. Результат записывать в Result
← →
Zeqfreed © (2007-09-18 20:31) [73]> : как лучше подставлять символы под 6 бит?
Лучше обратиться к RFC (http://tools.ietf.org/html/rfc3548#section-3) и воспользоваться готовыми таблицами.
Алгоритм улучшить (по скоростным и морально-этическим соображениям) можно отказавшись от использования строковых буферов для обработки потока информации.
← →
Anatoly Podgoretsky © (2007-09-18 20:33) [74]> Denis_ (18.09.2007 20:17:10) [70]
Как же не написано, для установки в позицию бита 2 (счет с нуля) делаем 1 shl 2
Результат проверь на бумажке, тогда будет понятно как это работает. Но вроде бы это в статье графически проилюстрировано, но лучше самому убедиться, просто полезнее прочувствовать это когда выполняешь на бумажке, тогда это останется в голове навечно.
← →
Zeqfreed © (2007-09-18 20:36) [75]> Anatoly Podgoretsky © (18.09.07 20:14) [69]
Если задача получить строковое представление данных, то это, несомненно, самый оптимальный вариант :)
← →
Zeqfreed © (2007-09-18 20:38) [76]> Denis_ © (18.09.07 20:25) [71]
Мой код демонстрирует лишь сам принцип. Как уже поправил Анатолий, есть более оптимальный вариант. А для Base64-кодирования получать строку из всех битов нет необходимости.
← →
Anatoly Podgoretsky © (2007-09-18 20:42) [77]> Zeqfreed (18.09.2007 20:31:13) [73]
Для получения Base64 лучше воспользоваться готовыми функциями из ICS или INDY
← →
Anatoly Podgoretsky © (2007-09-18 20:44) [78]> Zeqfreed (18.09.2007 20:38:16) [76]
Я показал не только более оптимальный вариант, такой цели особо не было, а использование логических операторов AND и OR - результатом будет или $30 или $31 - коды символов "0" и "1"
← →
Zeqfreed © (2007-09-18 20:56) [79]> Anatoly Podgoretsky © (18.09.07 20:44) [78]
Ну я-то понимаю что будет результатом, спасибо :)
← →
Denis_ © (2007-09-21 17:54) [80]Я сделал это!!! правда позавчера ещё, но учёба, учёба...Вот зашифровал свои данные. Если кто расшифрует, звоните, или в аську стучите.
mzaJtCiX21OQx0a6mXSIpIeR1YmBuj4E20JDF+KX1XaEn2i33XC8xAgDJesJiiCD2W7k1CKKmAIkgiN-rzejrDJLmCtT-i0D2e7DW8oIYUpEh4MAYPxToTN+rzXWbe60ZvU0li2QLGqA7mWGo+p6q1FLrz-4oTBXszyjrz0D2l4BFi386DFGtCt9qVp3tHB9rzy
всё в одну строку.Без пробелов.Все буквы - латинские. :D
Cпасибо Anatoly Podgoretsky, Инс, Zeqfreed, {RASkov}. Очень помогли.
Страницы: 1 2 3 вся ветка
Текущий архив: 2007.10.14;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.034 c