Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Простое шифрование

2.7K
17 января 2003 года
sashakova
5 / / 17.01.2003
Привет.
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]
1.8K
17 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by sashakova
Привет.
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]



самое простое операция ХOR:

дано
1. Текст
2. Пароль

тогда

Кодирование:
Зашифрованный текст = Текст XOR Пароль;
Декодирование:
Текст = Зашифрованный текст XOR Пароль;

Примечания:
1. используется побитовая операция XOR
2. все производится по элементно
т. е.
Зашифрованный текст = Текст XOR Пароль;
3. если пароль и текст не соответствуют по длине то используем весь пароль заново
4. можно усложнить алгоритм изменив порядок следования текста и пароля в зашифрованном тексте

442
17 января 2003 года
HexoGenus
121 / / 20.03.2000
Если твоя задача кодирование информации с целью спрятать ее от обычного пользователя или от программистов не являющихся суперспециалистами в шифровании то могу предложить тебе простой вариант ... как читать из файла и записывать в него думаю ты знаешь...
итак у нас имется массив байт который нужно зашифровать...
воспользуемся обычным XOR
Код:

#include "math.h"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String strText="Маша + коля = Любовь";
ShowMessage("Строка до шифрования: "+strText);
for (int i=1;i<=strText.Length();i++)
{
char mask=sin(i)*400-cos(i)*250/20;
strText=(strText ^ mask);
}
ShowMessage("Строка после шифрования: "+strText);
for (int i=1;i<=strText.Length();i++)
{
char mask=sin(i)*400-cos(i)*250/20;
strText=(strText ^ mask);
}
ShowMessage("Строка после дешифрования: "+strText);
}

Функцию для маски нужно подбирать такую что бы она выдавала как можно более сильно разбросанные значения и что бы это свойство сохранялось при сколь угодно больших значениях i

Но есть один ньюанс:
Ты не имеешь права встраивать этот алгоритм в программы которые пишешь для бюджетных организаций
Там можно использовать только сертифицированные средства шифрования
Так что обращайся в этом случае в местное подразделение ФСБ или в ФАПСИ
Как мне порекомендовали на одном из форумов если не хочешь проверки своей программы без лишней необходимости называй это не шифрованием а маскировкой значений
2.7K
17 января 2003 года
sashakova
5 / / 17.01.2003
Спасибо, ты можно сказать меня выручил. Но т.к я плохо знаю Вилдер(это еще мягко сказано), то у меня возникли проблемы при компилировании твоего кода(я его компилировал без изменений, как ты дал). У меня возникли ошибки на строке void __fastcall TForm1::Button1Click(TObject *Sender) которые в хелпе я нашел следуещее
The C++ qualifier in the construction qual::identifier is not the name of a struct or class.
и
A declaration has an extra or incorrect termination symbol, such as a semicolon placed after a function body.
A C++ member function declared in a class with a semicolon between the header and the opening left brace also generates this error.

Как мне быть. Как запустить прогу я не знаю. Может кто нибудь объяснит по шагам.

И еще я не могу установить себе билдер, как только должно появится процентная строка состояния вылазит ошибка.
error copying file
unknown Error
Error code:-1
Source File:*.cnf
Destination file:
Как мне его установить.
442
17 января 2003 года
HexoGenus
121 / / 20.03.2000
Попробуй протереть монитор тряпочкой... если не поможет протри кнопку reset на системном блоке...
если появится черный экран и побегут надписи значит у тебя уже что то начало получаться и вышеперечисленные операции надо повторить в той же последовательности...
Если все таки не получится добиться совершенства то возможно виноваты технические причины...
Как вариант влияние элетромагнитных полей на шнуры аппаратуры...
Если не верите попробуйте у работающего компьютера поднести звонящий сотовый телефон к шнуру мыши и посмотрите что будет твориться с курсором...
Если окажется что Ваш компьютер подвержен таким влияниям то все шнуры необходимо укоротить до длинны 15 см. С такой просьбой вы можете обратиться в любую телемастерскую вашего района...
Всего Вам наилучшего... 8-)
2.7K
17 января 2003 года
sashakova
5 / / 17.01.2003
Не понял, это типа ответ??? Или что???
Не сочтите за наглость просто я хотел бы знать в чем мои ошибки и как их устранить.
2.7K
17 января 2003 года
sashakova
5 / / 17.01.2003
А вообще ты прав, мне и впям так надо сделать.
Насчет установке Bildera: стояла зашита. А т.к у меня была установка не на СД а на синте то она и срабатывала. Я создал образ диска и установил.
А про код я тоже разобрался. Дело в том что я твой код пошел в институт пробывать, а там понимаешь добрые люди все искаверкают. Вообщем не знаю как там исковеркались, но не было кнопок типа Standart Win32 System и еще много чего. А так как я Билдер видел в первый раз то и не мог понять в чем дело, а как дома установил билдер, то сразу во всем разобрался. Прошу не смеятся, т.к это мой первый запущенный код.
А ты не подскажешь как считывать текст из файла и записывать. Ты говорил что я наверное знаю, а я как раз-то и не знаю:)))
ЗЫ Добавлю чтение запись из файла и на этом остановлюсь.
Спасибо что помогаешь. Без тебя бы пропал!!!
442
18 января 2003 года
HexoGenus
121 / / 20.03.2000
Извини если я был груб...
Но дело в том что мне сложно поверить что человек который не знает как в билдере разместить кнопку на форме и после двойного щелчка на ней прописать для нее код, будет интересоваться шифрованием файлов...
Вроде как несколько несовместимые уровни полета мысли...
Хотя кто его знает может ты какой гений начинающий имеющий идеи разработки какой-то полезной программульки...
Мне по твоему ответу показалось что это кто-то из спецов издевается над посетителями форума...
А уж то что ты не знаешь как работать с файлами...

Ну да ладно...
Вобщем есть различные варианты работы с файлами..
можно использовать стандартные библиотеки C++ но как мне кажется в этом случае ты будешь ограничен ДОСовскими требованиями к названиям файлов...
можно использовать функции API windows у тебя в MSHelp твоего билдера лежат справочники найди в них File Functions (Win32 Programer's Reference)
если разберешься то наверно это лучший способ...

ну и вариантик тебе как начинающему лично от меня ...
если тебе пока не нужно работать с огромными файлами то попробуй использовать класс
TStringList который позволяет работать с массивами строк String
попробуй создать Блокнотом C:\1.txt и в нем прописать несколько строчек текста
потом запусти такой код:

TStringList * tsLoFile=new TStringList();
tsLoFile->LoadFromFile("c:\\1.txt");
for (int i=0; i<tsLoFile->Count;i++)
{
String sCurent,sTemp;
sCurent=tsLoFile->Strings;
ShowMessage(sCurent);
for (int i=sCurent.Length();i>0;i--) sTemp=sTemp+sCurent;
tsLoFile->Strings=sTemp;
ShowMessage(sTemp);
}
tsLoFile->SaveToFile("c:\\2.txt");
delete tsLoFile;

Посмотри потом содержимое файла c:\2.txt
2.0K
20 января 2003 года
segev
67 / / 19.01.2003
sashakova
Что за дурацкая практика открывать одинаковые темы в разных форумах :-x ?
см. ответ в ветке MS VC++.
748
09 декабря 2005 года
AlphaOmega
159 / / 28.09.2004
Цитата:
Originally posted by HexoGenus

Код:

#include "math.h"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String strText="Маша + коля = Любовь";
ShowMessage("Строка до шифрования: "+strText);
for (int i=1;i<=strText.Length();i++)
{
char mask=sin(i)*400-cos(i)*250/20;
strText=(strText ^ mask);
}
ShowMessage("Строка после шифрования: "+strText);
for (int i=1;i<=strText.Length();i++)
{
char mask=sin(i)*400-cos(i)*250/20;
strText=(strText ^ mask);
}
ShowMessage("Строка после дешифрования: "+strText);
}


Попробовал твой метод.
Когда конвертируешь текст любой длины и потом дешифруешь его - всё работает. Однако, если шифрованный текст сохранить в файл, то при его загрузке и дешифровании происходит значительная потеря текста... Иногда некоторые строки не переводятся, а иногда дешифрование останавливается процентах на 20-25%....
При этом, если шифровать не математической функцией, а постоянной величиной (вместо mask подставить любое число), то всё ок...

17K
07 марта 2006 года
MaximUkr
2 / / 07.03.2006
Цитата:
Originally posted by AlphaOmega
Попробовал твой метод.
Когда конвертируешь текст любой длины и потом дешифруешь его - всё работает. Однако, если шифрованный текст сохранить в файл, то при его загрузке и дешифровании происходит значительная потеря текста... Иногда некоторые строки не переводятся, а иногда дешифрование останавливается процентах на 20-25%....
При этом, если шифровать не математической функцией, а постоянной величиной (вместо mask подставить любое число), то всё ок...

Тоже встретился с такой проблемкой. Действительно, после использования "не мат расчетов" проблемма пропала, но пропала она частично :( Т.е. % потерь данных стал очень низок, но данные терялись. Причем с зависимостью. Просчитал, на 35-м символе после пробела перед которым стоит "в"(русское). Странно. Изменив текст, а именно удалив до "в" пару символов, текст шифруется/сохраняется/загружается/дешифруется нормально. Странно, но факт. В итоге надо проверять каждый файл, а их пару троек тысяч!!!
В качестве маски использовал примерный расчет(i*1.123).
Если кто сможет решить проблемку, напишите мыло плиз [email]pleshkov_max@mail.ru[/email].

P.S. дико извеняюсь, что поднял давнешнюю тему :)

16K
10 марта 2006 года
plamst
2 / / 04.03.2006
Цитата:
Originally posted by MaximUkr
Тоже встретился с такой проблемкой. Действительно, после использования "не мат расчетов" проблемма пропала, но пропала она частично :( Т.е. % потерь данных стал очень низок, но данные терялись. Причем с зависимостью. Просчитал, на 35-м символе после пробела перед которым стоит "в"(русское). Странно. Изменив текст, а именно удалив до "в" пару символов, текст шифруется/сохраняется/загружается/дешифруется нормально. Странно, но факт. В итоге надо проверять каждый файл, а их пару троек тысяч!!!
В качестве маски использовал примерный расчет(i*1.123).
Если кто сможет решить проблемку, напишите мыло плиз [email]pleshkov_max@mail.ru[/email].

P.S. дико извеняюсь, что поднял давнешнюю тему :)



На самом деле всё просто...
После шифрования не нужно сохранять в файл сами символы, проще брать код символа и сохранять его по ходу шифрования, потом при чтении файла обратную процедуру == берём число, переводим в символ, дешевруем...
:)
Как узнать код символа==http://forum.codenet.ru/showthread.php?threadid=14091&goto=nextnewest

17K
10 марта 2006 года
MaximUkr
2 / / 07.03.2006
Цитата:
Originally posted by plamst
На самом деле всё просто...
После шифрования не нужно сохранять в файл сами символы, проще брать код символа и сохранять его по ходу шифрования, потом при чтении файла обратную процедуру == берём число, переводим в символ, дешевруем...
:)
Как узнать код символа==http://forum.codenet.ru/showthread.php?threadid=14091&goto=nextnewest


Но ведь в таком случае размер файла увеличится в два-три раза!!! А в моем случае(более 2000 файлов) это катастрафически нежелательно!

534
10 марта 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by MaximUkr
Но ведь в таком случае размер файла увеличится в два-три раза!!! А в моем случае(более 2000 файлов) это катастрафически нежелательно!

Так вы, господа хорошие, в какие файлы шифрованный текст сохраняете? В текстовые? Я бы не советовал такое вытворять, помятуя о символах EOF, ESC и других, использующихся в структуре txt-файлов. А вот с бинарниками никахих глюков быть не должно в принципе. И ещё: использовать float-функции, значения которых потом конвертируются в целочисленные путём округления, для генерации некоторых устойчивых величин - огромная глупость! Разные процессоры - разные результаты... Причём, при некоторых значений аргумента вышеописанной функции, погрешность результата может быть очень существенной. Если уж надо использовать целочисленные функции типа f(i), где i зависит от номер шага, то и сама f должна быть линейной комбинацией функций целочисленных, а не дробных! Хотя бы даже и так: f(i) = (i - 2)*i % 255, но уж никак не с использованием тригонометрических функций

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог