Азы криптографии. Простая шифровка
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char *strcrypt(char *source)
{
char *original = source;
// Это естесно ошибка, но я хотел показать сам принцив, что я хочу
while (*source) {
if (strcmp(source, 'a'))
strcpy(source, '10010101');
source++;
}
return (original);
}
int main(){
char linein[81], conv[81];
cin >> linein;
strcpy(conv, strcrypt(linein));
cout << conv << endl;
return 0;
}
Компилятор ругается так d:\Visual Studio\crypto\main.cpp(14): error C2015: too many characters in constant
Нашел ошибку одну, вместо strcmp использую теперь функцию strchr, но компилятор на строку strcpy(source, '11001101')
Компилятор ругается так d:\Visual Studio\crypto\main.cpp(14): error C2015: too many characters in constant
strcpy(source, "11001101");
strcpy(source, "11001101");
Ты хотел что то вроде этого:
Функция заменяет все символы 'a' на 11001101 в строке и возвращяет указатель на новую строку содержащюю преобразованный текст.
Правда это не буде являться хорошим алгоритмом для шифровки данных,так как их будет пото практически невозможно восстановить.
char* strcrypt(char* source)
{
int count=0;
char* dest=source;
while(*dest)
{
if(*dest=='a')
count++;
dest++;
}
dest=new char [strlen(source)-count+sizeof("11001101")*count+1];
char* orgdest=dest;
while(*source)
{
if(*source=='a'){
strcpy(dest,"11001101");
dest+=sizeof("11001101")-1;
source++;
}
else {
*dest=*source;
dest++;
source++;
}
}
return orgdest;
}
Правда это не буде являться хорошим алгоритмом для шифровки данных,так как их будет пото практически невозможно восстановить.
Если полученный текст невозможно будет восстановить, тогда не проще его затереть символами напр. rand()%96+32?
{
char *original = source;
while(*source)
{
if(*source=='a')*source=0xCD;
source++;
}
return original;
}
Если полученный текст невозможно будет восстановить, тогда не проще его затереть символами напр. rand()%96+32?
{
char *original = source;
while(*source)
{
if(*source=='a')*source=0xCD;
source++;
}
return original;
}
Конечно,но он просил сделать так как он написал. Конечно намного легче менять один символ на другой особенно если он не является стандартным для обычного читаемого текста. Но что если вдруг ему нужно будет шифровать бинарник,тогда и твой алгоритм не поможет. В принципе для него было бы неплохо начать с побайтного ксора.
В принципе для него было бы неплохо начать с побайтного ксора.
Да это проще всего.
{
char *original = source;
while(*source)
{
*source=*source^sifr;
source++;
}
return original;
}
Знаете как зашифровать пароль??? Я придумал!!!
Так:
Создаём 'золотой' текстовый файл (вобщем не важно какой. Та пишем:
10111010
10001101
00110010
01010101
Это всё буква a!(Чем больше значений тем выше шифровка)(Вместо нулёв и колов можо писать всё чо хошь)
Всё это деёствует так! :
Прога "берёт" слово и заменяет букву а или любую другую на рандомно выбраное значение из значений из файла относящихся к этой букве!!! В итоге мы получаем слово типа этого:
1010101010101001010...10101010.
Расшифровать так:
Делит прога слолво на части по 8 символов. И сравнивает со значениями из золотого файлика!
Главное файлик хацкерам не отдать!!!:!!!: :angel:
Как идея???
Наро у меня мысль!!!
Знаете как зашифровать пароль??? Я придумал!!!
Так:
Создаём 'золотой' текстовый файл (вобщем не важно какой. Та пишем:
10111010
10001101
00110010
01010101
Это всё буква a!(Чем больше значений тем выше шифровка)(Вместо нулёв и колов можо писать всё чо хошь)
Всё это деёствует так! :
Прога "берёт" слово и заменяет букву а или любую другую на рандомно выбраное значение из значений из файла относящихся к этой букве!!! В итоге мы получаем слово типа этого:
1010101010101001010...10101010.
Расшифровать так:
Делит прога слолво на части по 8 символов. И сравнивает со значениями из золотого файлика!
Главное файлик хацкерам не отдать!!!:!!!: :angel:
Как идея???
А зачем так мучиться, если есть RSA? Там и криптостойкость повыше.
А зачем так мучиться, если есть RSA? Там и криптостойкость повыше.
А зачем тут мучаца??? Этот алгоритм написать ка два пальца сам знаешь что...
Ещо между этими 8 символами можно вставлять ещчо несколько "ложных"
Но есть ещо вариант::D
Короче ети во цифр ставить в рандомной последовотельности "ну почти..." А инфу о расшифровке записывать в отдельный файлик!
Попробуй разгадай!:) Нехороший человек не меньше часа будет мучаца!
И вообще написанное своими руками всегда лучше написаного чужими...:D
А зачем тут мучаца??? Этот алгоритм написать ка два пальца сам знаешь что...
Ещо между этими 8 символами можно вставлять ещчо несколько "ложных"
Но есть ещо вариант::D
Короче ети во цифр ставить в рандомной последовотельности "ну почти..." А инфу о расшифровке записывать в отдельный файлик!
Попробуй разгадай!:) Нехороший человек не меньше часа будет мучаца!
И вообще написанное своими руками всегда лучше написаного чужими...:D
Можно еще получившуюся ерунду запаковать самодельным архиватором, тогда еще сложнее будет.
Можно еще получившуюся ерунду запаковать самодельным архиватором, тогда еще сложнее будет.
ИМХО, это все - лишние проблемы себе на голову. Алгоритм можно будет кракнуть без проблем и архиватор(упаковщик) тут не поможет. Алгоритм должен быть криптостойким, то-есть чтоб его можно было только брутфорсить и очень долго. Как RSA. Все остальное - фигня.
char str[255];
while ((grade = getchar()) != '\n')
{
switch(grade)
{
case 'a':
strcat(str, "12");
break;
case 'b':
strcat(str, "34");
break;
}
cout << str;
}
PS =) ребят, давайте посельезней.. А то флейм какой-то пошел =)))
Я в своем алгоритме меняю а на 12 и b на 34
Ещо между этими 8 символами можно вставлять ещчо несколько "ложных"
Но есть ещо вариант::D
Короче ети во цифр ставить в рандомной последовотельности "ну почти..." А инфу о расшифровке записывать в отдельный файлик!
Попробуй разгадай!:) Нехороший человек не меньше часа будет мучаца!
Ты понимаеш что файлик-ключ может получится побольше инфы. А его ведь тоже передавать надо если он для каждого сеанса иной. И вообще зачем инфу так роздувать (в 8 раз). А расшифровивать то самому даже с ключом извесним как трудно.
А почему бы не написать велосипед типа блочного шифра перестановки или даже зсув какойто. Тоже ведь интересно.
И вообще написанное своими руками всегда лучше написаного чужими...:D
Ех не всегда. Меня с моим кодом на етом форуме уже обламали (и очень справедливо).
Не лучше, но приятнее - ето точно.
Алгоритм можно будет кракнуть без проблем и архиватор(упаковщик) тут не поможет.
Алгоритм можно. А упаковщик - ето как упаковать.
Упаковщик тем и прикольний, что в роли ключа алгоритм выступает (немножко код по другому написать и уже не розожмет).
Если это математика - попробуй засунуть на вход в MatLab...
Если промерка знаний...
Твой код что-то прям из "Книга Delphi по написанию програма на С ++"
Наро у меня мысль!!!
Знаете как зашифровать пароль??? Я придумал!!!
Так:
Создаём 'золотой' текстовый файл (вобщем не важно какой. Та пишем:
10111010
10001101
00110010
01010101
Это всё буква a!(Чем больше значений тем выше шифровка)(Вместо нулёв и колов можо писать всё чо хошь)
Всё это деёствует так! :
Прога "берёт" слово и заменяет букву а или любую другую на рандомно выбраное значение из значений из файла относящихся к этой букве!!! В итоге мы получаем слово типа этого:
1010101010101001010...10101010.
идея файлик-ключ не хороша, т.к. файл, подлежащий шифрованию, может оказаться гораздо больше файлика-ключика. Это будет означать, что ключ начнёт повторяться, а повторяющийся ключ - залог успешного взлома. Есть идея использовать обычный ключ в 256 символов, но каждый раз когда ключ будет вступать в фазу повторения добавлять к алгоритму шифрования оператор побитового сдвига <<=. Так можно "замазать" повторения ключа и не придётся таскать за собой библиотеку файликов-ключиков.