Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Помогите зашифровать строку

Страниц (1): [1]
 

1. Cahanynen - 07 Января, 2024 - 05:12:29 - перейти к сообщению
Знаю что в обычных языках программирования есть отдельные модули, которые сделают всё за меня. Но в киборе подобного нет.

Нужно зашифровать строку по ключу с возможностью расшифровать имея этот ключ. Ключ, например, индивидуальный код. Какой-то сильно сложной шифровки не нужно, но будет использовать для пароля.

Есть идеи?
3. Kibor - 07 Января, 2024 - 09:05:33 - перейти к сообщению
Я предпочитаю когда один и тот же "текст"(данные) передаются в каждом случае отдельном по разному.
Для этого ключ должен быть динамичным. Он смешивается с данными которые надо расшифровать. Принимающая сторона знает не ключ, а как его достать из принятых данных. И ключ кстати тоже зашифрован по известному двум сторонам алгоритму.
Когда принимающая сторона достала ключ, она расшифровала все остальное.

Преимущества - постоянно одни и те же данные отправляются по разному.
Тяжело расшифровать без взлома принимающей стороны.
4. Cahanynen - 08 Января, 2024 - 08:04:10 - перейти к сообщению
CODE:


string text="тестовый текст: для проверки; шифровки";
string pass="a2qw6";

string shifr=shifrovanie(text, pass);
messagebox(shifr);

string result=shifrovanie( shifr, pass);
messagebox(result);


function binary(string symbol)
{
int x=formatci(symbol), arr[8], z=-1;
string s="";
while (x>0){z++; arr[z]=mod(x, 2); x=x/2;}
for(int i=z; i>-1; i--)s=s+format(arr[i]);
while(size(s)<8)s="0"+s;
return s;
}

function decimal(string symbol3)
{
char c[9]; strcpy(#c[0], symbol3);
int z=0, degree=size(symbol3)-1;
for(int i=0; i<8; i++){if(c[i]=='1')z=z+pow(2, degree); degree--;}
return formatic(z);
}

function xor(int x, int y){if((x==0 && y==0) || (x==1 && y==1))return 0; return 1;}
function mod(int a, int b){int z=a/b; return a-z*b;}

function shifrovanie(string str, string key_)
{
string symbol2, ss;
char c1[9], c2[9];
int size_str=size(str), size_key=size(key_);
new char c3[size_str+1]; new char c4[size_key+1];
strcpy(#c3[0], str); strcpy(#c4[0], key_);
ss="";
for(int i=0; i<size_str; i++)
{
strcpy(#c1[0], binary(c3[i]));
for(int j=0; j<size_key; j++)
{
symbol2="";strcpy(#c2[0], binary(c4[j]));
for(int k=0; k<8; k++)
{
if(xor(formatsn(c1[k]), formatsn(c2[k]))==0)symbol2=symbol2+"0";
else symbol2=symbol2+"1";
}
strcpy(#c1[0], symbol2);
}
ss=ss+decimal(symbol2);
}
delete c3;
delete c4;
return ss;
}



Мне подходит такой вариант, но есть проблемы с сохранением в ini
Появляются символы с иероглифами
5. Zireael - 08 Января, 2024 - 08:15:17 - перейти к сообщению
 Цитата:
но есть проблемы с сохранением в ini

Конвертируйте сохраняемую строку в формат base64.
6. Cahanynen - 09 Января, 2024 - 18:43:09 - перейти к сообщению
CODE:

string text="QWEqwe123";
string code="шифр";


string incr=incryption(text, code);
messagebox("Зашифровано: "+incr);


char BYTE[500];
strcpy(#BYTE[0], incr);
string coded=base64code (#BYTE[0], size(incr));
messagebox("Закодировано: "+coded);


char A[500];
char B[500];
strcpy(#A[0], coded);
base64decode (#A[0], size(coded), #B[0]);
string decoded=format(#B[0]);
messagebox("Раскодировано: "+decoded);


string decryp=incryption(format(#B[0]), code);
messagebox("Расшифровано: "+decryp);





function binary(string symbol)
{
int x=formatci(symbol), arr[8], z=-1;
string s="";
while (x>0){z++; arr[z]=mod(x, 2); x=x/2;}
for(int i=z; i>-1; i--)s=s+format(arr[i]);
while(size(s)<8)s="0"+s;
return s;
}

function decimal(string symbol3)
{
char c[9]; strcpy(#c[0], symbol3);
int z=0, degree=size(symbol3)-1;
for(int i=0; i<8; i++){if(c[i]=='1')z=z+pow(2, degree); degree--;}
return formatic(z);
}

function xor(int x, int y){if((x==0 && y==0) || (x==1 && y==1))return 0; return 1;}
function mod(int a, int b){int z=a/b; return a-z*b;}

function incryption(string str, string key_)
{
string symbol2, ss;
char c1[9], c2[9];
int size_str=size(str), size_key=size(key_);
new char c3[size_str+1]; new char c4[size_key+1];
strcpy(#c3[0], str); strcpy(#c4[0], key_);
ss="";
for(int i=0; i<size_str; i++)
{
strcpy(#c1[0], binary(c3[i]));
for(int j=0; j<size_key; j++)
{
symbol2="";strcpy(#c2[0], binary(c4[j]));
for(int k=0; k<8; k++)
{
if(xor(formatsn(c1[k]), formatsn(c2[k]))==0)symbol2=symbol2+"0";
else symbol2=symbol2+"1";
}
strcpy(#c1[0], symbol2);
}
ss=ss+decimal(symbol2);
}
delete c3;
delete c4;
return ss;
}


может кому-то пригодится

Powered by ExBB FM 1.0 Final