Эта статья навряд ли будет ценна для большинства читателей, с точки зрения криптографии и программирования. Однако я думаю, что всем будет интересно узнать как именно мыслил я, когда писал свою первую утилиту.
Все начиналось очень даже непримечательно. Я читал книгу по C++, выяснил, что можно проинкрементировать даже символ(тогда это для меня было ого-го какое откровение), также я научился работать с файлами. Ну что-же, взял и написал я программу, которая инкрементирует каждый символ файла. Штука бестолковая, но я был в восторге и очень собой гордился. Прошло несколько дней, я подумал и написал другую программу, которая декрементировала каждый символ файла. Тут я подумал: «Да это же шифровка и расшифровка, какой я умный!»
Но радость моя была недолгой. Однажды на форуме я наткнулся на интересную фразу… была она примерно такой: «XORом круче всего шифровать» — тут мое самолюбие было задето и я решил выяснить. что же за XOR то такой волшебный. До этого я знал только логический XOR(оператор ^^), да и тот редко использовал. Что я сделал первым делом? Не зная как пишется побитовый оператор(да и лишь догадываясь о том, что он должен быть побитовый, если честно), я написал такую штуку:
Я думаю, всем понятно как эта штука работала. Я вдруг понял, что если «проXORить» символ на другой символ дважды, то получиться тот самый символ. Тут я стал думать. Ведь теперь я могу вместо двух программ(одна шифрует, другая расшифровует) сделать одну. Здорово? Здорово. Хоть и примитивно.
Дело оставалось за малым. Я сделал так, чтобы можно было шифровать под ключ(последовательно «XORя» на каждый символ строки, содержащей ключ). Вылизал ее, сделал красивой, мою программу. Получилось что-то такое:
Все просто. Но это дало мне возможность почувствовать себя исследователем. Экспериментатором и первооткрывателем, и несмотря на то, что моя учительница по информатике сказала, что мне гораздо важнее выучить паскаль и комбинаторику, именно эта первая программа поняла мне определиться с дальнейшим жизненным путем.
Как все начиналось.
Все начиналось очень даже непримечательно. Я читал книгу по C++, выяснил, что можно проинкрементировать даже символ(тогда это для меня было ого-го какое откровение), также я научился работать с файлами. Ну что-же, взял и написал я программу, которая инкрементирует каждый символ файла. Штука бестолковая, но я был в восторге и очень собой гордился. Прошло несколько дней, я подумал и написал другую программу, которая декрементировала каждый символ файла. Тут я подумал: «Да это же шифровка и расшифровка, какой я умный!»
Как зародилась идея.
Но радость моя была недолгой. Однажды на форуме я наткнулся на интересную фразу… была она примерно такой: «XORом круче всего шифровать» — тут мое самолюбие было задето и я решил выяснить. что же за XOR то такой волшебный. До этого я знал только логический XOR(оператор ^^), да и тот редко использовал. Что я сделал первым делом? Не зная как пишется побитовый оператор(да и лишь догадываясь о том, что он должен быть побитовый, если честно), я написал такую штуку:
#include<iostream>
using namespace std;
int man(){
char c='a' xor 'b';
cout << c << endl << c xor 'b' << endl;
}
Я думаю, всем понятно как эта штука работала. Я вдруг понял, что если «проXORить» символ на другой символ дважды, то получиться тот самый символ. Тут я стал думать. Ведь теперь я могу вместо двух программ(одна шифрует, другая расшифровует) сделать одну. Здорово? Здорово. Хоть и примитивно.
Что получилось.
Дело оставалось за малым. Я сделал так, чтобы можно было шифровать под ключ(последовательно «XORя» на каждый символ строки, содержащей ключ). Вылизал ее, сделал красивой, мою программу. Получилось что-то такое:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
char cr(int c, char key){
return (c ^ key);
}
int main(int argc, char* argv[]){
fstream f1(argv[1], ios::in | ios::binary);
fstream f2(argv[3], ios::out | ios::binary);
const string key(argv[2]);
char c;
int j=0;
while(true){
f1.get(c);
if(!f1.eof()){
if (j>key.size())
j=0;
f2.put(cr(c, key[j]));
j++;
}
else break;
}
f1.close();
f2.close();
Все просто. Но это дало мне возможность почувствовать себя исследователем. Экспериментатором и первооткрывателем, и несмотря на то, что моя учительница по информатике сказала, что мне гораздо важнее выучить паскаль и комбинаторику, именно эта первая программа поняла мне определиться с дальнейшим жизненным путем.