Простое шифрование
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]
Привет.
Нужно на Visual C++ или на Билдере написать что-то типа шифрование текста. Ну там например менюшка и допустим с файла текст считывает и показывает в зашифрованном виде и расшифрованном. Но у меня с этим туго идет. Может у кого нибудь есть исходник.
если что мой мыл [email]sasha@dlm.ru[/email]
самое простое операция ХOR:
дано
1. Текст
2. Пароль
тогда
Кодирование:
Зашифрованный текст = Текст XOR Пароль;
Декодирование:
Текст = Зашифрованный текст XOR Пароль;
Примечания:
1. используется побитовая операция XOR
2. все производится по элементно
т. е.
Зашифрованный текст = Текст XOR Пароль;
3. если пароль и текст не соответствуют по длине то используем весь пароль заново
4. можно усложнить алгоритм изменив порядок следования текста и пароля в зашифрованном тексте
итак у нас имется массив байт который нужно зашифровать...
воспользуемся обычным 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
Но есть один ньюанс:
Ты не имеешь права встраивать этот алгоритм в программы которые пишешь для бюджетных организаций
Там можно использовать только сертифицированные средства шифрования
Так что обращайся в этом случае в местное подразделение ФСБ или в ФАПСИ
Как мне порекомендовали на одном из форумов если не хочешь проверки своей программы без лишней необходимости называй это не шифрованием а маскировкой значений
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:
Как мне его установить.
если появится черный экран и побегут надписи значит у тебя уже что то начало получаться и вышеперечисленные операции надо повторить в той же последовательности...
Если все таки не получится добиться совершенства то возможно виноваты технические причины...
Как вариант влияние элетромагнитных полей на шнуры аппаратуры...
Если не верите попробуйте у работающего компьютера поднести звонящий сотовый телефон к шнуру мыши и посмотрите что будет твориться с курсором...
Если окажется что Ваш компьютер подвержен таким влияниям то все шнуры необходимо укоротить до длинны 15 см. С такой просьбой вы можете обратиться в любую телемастерскую вашего района...
Всего Вам наилучшего... 8-)
Не сочтите за наглость просто я хотел бы знать в чем мои ошибки и как их устранить.
Насчет установке Bildera: стояла зашита. А т.к у меня была установка не на СД а на синте то она и срабатывала. Я создал образ диска и установил.
А про код я тоже разобрался. Дело в том что я твой код пошел в институт пробывать, а там понимаешь добрые люди все искаверкают. Вообщем не знаю как там исковеркались, но не было кнопок типа Standart Win32 System и еще много чего. А так как я Билдер видел в первый раз то и не мог понять в чем дело, а как дома установил билдер, то сразу во всем разобрался. Прошу не смеятся, т.к это мой первый запущенный код.
А ты не подскажешь как считывать текст из файла и записывать. Ты говорил что я наверное знаю, а я как раз-то и не знаю:)))
ЗЫ Добавлю чтение запись из файла и на этом остановлюсь.
Спасибо что помогаешь. Без тебя бы пропал!!!
Но дело в том что мне сложно поверить что человек который не знает как в билдере разместить кнопку на форме и после двойного щелчка на ней прописать для нее код, будет интересоваться шифрованием файлов...
Вроде как несколько несовместимые уровни полета мысли...
Хотя кто его знает может ты какой гений начинающий имеющий идеи разработки какой-то полезной программульки...
Мне по твоему ответу показалось что это кто-то из спецов издевается над посетителями форума...
А уж то что ты не знаешь как работать с файлами...
Ну да ладно...
Вобщем есть различные варианты работы с файлами..
можно использовать стандартные библиотеки 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
Что за дурацкая практика открывать одинаковые темы в разных форумах :-x ?
см. ответ в ветке MS VC++.
Код:
#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 подставить любое число), то всё ок...
Попробовал твой метод.
Когда конвертируешь текст любой длины и потом дешифруешь его - всё работает. Однако, если шифрованный текст сохранить в файл, то при его загрузке и дешифровании происходит значительная потеря текста... Иногда некоторые строки не переводятся, а иногда дешифрование останавливается процентах на 20-25%....
При этом, если шифровать не математической функцией, а постоянной величиной (вместо mask подставить любое число), то всё ок...
Тоже встретился с такой проблемкой. Действительно, после использования "не мат расчетов" проблемма пропала, но пропала она частично :( Т.е. % потерь данных стал очень низок, но данные терялись. Причем с зависимостью. Просчитал, на 35-м символе после пробела перед которым стоит "в"(русское). Странно. Изменив текст, а именно удалив до "в" пару символов, текст шифруется/сохраняется/загружается/дешифруется нормально. Странно, но факт. В итоге надо проверять каждый файл, а их пару троек тысяч!!!
В качестве маски использовал примерный расчет(i*1.123).
Если кто сможет решить проблемку, напишите мыло плиз [email]pleshkov_max@mail.ru[/email].
P.S. дико извеняюсь, что поднял давнешнюю тему :)
Тоже встретился с такой проблемкой. Действительно, после использования "не мат расчетов" проблемма пропала, но пропала она частично :( Т.е. % потерь данных стал очень низок, но данные терялись. Причем с зависимостью. Просчитал, на 35-м символе после пробела перед которым стоит "в"(русское). Странно. Изменив текст, а именно удалив до "в" пару символов, текст шифруется/сохраняется/загружается/дешифруется нормально. Странно, но факт. В итоге надо проверять каждый файл, а их пару троек тысяч!!!
В качестве маски использовал примерный расчет(i*1.123).
Если кто сможет решить проблемку, напишите мыло плиз [email]pleshkov_max@mail.ru[/email].
P.S. дико извеняюсь, что поднял давнешнюю тему :)
На самом деле всё просто...
После шифрования не нужно сохранять в файл сами символы, проще брать код символа и сохранять его по ходу шифрования, потом при чтении файла обратную процедуру == берём число, переводим в символ, дешевруем...
:)
Как узнать код символа==http://forum.codenet.ru/showthread.php?threadid=14091&goto=nextnewest
На самом деле всё просто...
После шифрования не нужно сохранять в файл сами символы, проще брать код символа и сохранять его по ходу шифрования, потом при чтении файла обратную процедуру == берём число, переводим в символ, дешевруем...
:)
Как узнать код символа==http://forum.codenet.ru/showthread.php?threadid=14091&goto=nextnewest
Но ведь в таком случае размер файла увеличится в два-три раза!!! А в моем случае(более 2000 файлов) это катастрафически нежелательно!
Но ведь в таком случае размер файла увеличится в два-три раза!!! А в моем случае(более 2000 файлов) это катастрафически нежелательно!
Так вы, господа хорошие, в какие файлы шифрованный текст сохраняете? В текстовые? Я бы не советовал такое вытворять, помятуя о символах EOF, ESC и других, использующихся в структуре txt-файлов. А вот с бинарниками никахих глюков быть не должно в принципе. И ещё: использовать float-функции, значения которых потом конвертируются в целочисленные путём округления, для генерации некоторых устойчивых величин - огромная глупость! Разные процессоры - разные результаты... Причём, при некоторых значений аргумента вышеописанной функции, погрешность результата может быть очень существенной. Если уж надо использовать целочисленные функции типа f(i), где i зависит от номер шага, то и сама f должна быть линейной комбинацией функций целочисленных, а не дробных! Хотя бы даже и так: f(i) = (i - 2)*i % 255, но уж никак не с использованием тригонометрических функций