Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2017, 18:43   #1
Rakf
 
Регистрация: 03.12.2016
Сообщений: 4
По умолчанию Шифр Эль-Гамаля и изображение

Возможно ли зашифровать изображение(jpg, bmp) шифром Эль-Гамаля? Пробовал открыть его в бинарном режиме и шифровать-дешифровать, но видимо что-то потерял в процессе, ибо изображение не открывается. Есть ли какие-то особенности при шифровании изображений? Язык: C++
Rakf вне форума Ответить с цитированием
Старый 01.05.2017, 18:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Какая разница изображение или нет? Не на изображении работает что ли?)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.05.2017, 01:46   #3
Rakf
 
Регистрация: 03.12.2016
Сообщений: 4
По умолчанию

Да, при текстовом файле все хорошо работает
Rakf вне форума Ответить с цитированием
Старый 02.05.2017, 08:02   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо вы по-разному это делали.

Ждите, телепаты уже выехали.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.05.2017, 11:33   #5
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Rakf Посмотреть сообщение
Есть ли какие-то особенности при шифровании изображений?
Есть какие-то особенности при работе с текстовыми и бинарными файлами.
Надо посмотреть на секретный исходный код.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 02.05.2017, 11:54   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А вы готовы NDA подписать?
p51x вне форума Ответить с цитированием
Старый 02.05.2017, 22:51   #7
Rakf
 
Регистрация: 03.12.2016
Сообщений: 4
По умолчанию

Код:
int mul(int a, int b, int n){// a*b mod n
    int sum=0;
     
    for(int i=0;i<b;i++){
        sum+=a;
         
        if(sum>=n){
            sum-=n;
        }
    }
 
    return sum;
} 
//Вычисляется x^y mod N
unsigned long fast_exp(unsigned long x, unsigned long y, unsigned long N)
{
    unsigned long tmp;
    if(y==1)
        return(x%N);
    if(y%2==0)
    {
        tmp = fast_exp(x,y/2,N);
        return((tmp*tmp)%N);
    }
    else
    {
        tmp = fast_exp(x,(y-1)/2,N);
        tmp = (tmp*tmp)%N;
        tmp = (tmp*x)%N;
        return(tmp);
    }
}


/*****************************************************
    p - простое число
    0 < g < p-1
    0 < x < p-1
    m - шифруемое сообщение m < p
*****************************************************/
void crypt(int p,int g,int x, string inFileName,string outFileName)
{
	 ifstream inf;
	 inf.open(inFileName,ios_base::binary);
	 ofstream outf;
	 outf.open(outFileName,ios_base::binary);



    int y=fast_exp(g,x,p);
     
 
     


    while(inf.good())
	{
         int m = inf.get();
		//inf.read((char*)&m,sizeof m);;
        if(m>= 0 || m == NULL)
		{
             
            int k=rand()%(p-2)+1; // 1 < k < (p-1)
            int a= fast_exp(g,k,p);
            int b= mul(fast_exp(y,k,p),m,p);
            outf<<a<<" "<<b<<" ";
        }
    }
 
    cout<<endl;
 
    inf.close();
    outf.close();
}
 
void decrypt(int p,int x,string inFileName,string outFileName){
     ifstream inf;
	 inf.open(inFileName,ios_base::binary);
	 ofstream outf;
	 outf.open(outFileName,ios_base::binary);
    cout<<"\nДешифрованый текст:"<<endl;
 
    while(inf.good()){
        int a=0;
        int b=0;
        inf>>a;
        inf>>b;
         
        if(a!=0&&b!=0){
         
            int deM=mul(b,fast_exp(a,p-1-x,p),p);// m=b*(a^x)^(-1)mod p =b*a^(p-1-x)mod p - трудно было  найти нормальную формулу, в ней вся загвоздка
            char m=static_cast<char>(deM);
            outf<<m;
            cout<<m;
        }
    }
     
    cout<<endl;
 
    inf.close();
    outf.close();
}

int main(){
    srand(time(NULL));
   
    crypt(107,23,8, "1.png","out_crypt.png");
    decrypt(107,8,"out_crypt.png","out_decrypt.png");
    
    return 0;
}
Rakf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЭЦП Эль-Гамаля Boltina Безопасность, Шифрование 5 17.03.2015 21:26
шифр эль гамаля на Delphi Athen Помощь студентам 9 04.03.2014 12:03
Шифрование текста методом Эль-Гамаля W. Aron Помощь студентам 1 27.10.2013 12:27
криптосистема эль-гамаля C# AL_LORD Помощь студентам 3 03.10.2012 01:20
криптосистема Эль-Гамаля Nanochka Помощь студентам 16 21.04.2012 10:53