Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм RSA на perl, некоторые проблемы в реализации 
:(
    Опции темы
rainz
Дата 17.9.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.8.2010

Репутация: нет
Всего: нет



Решил написать, чисто из спортивного интереса.. но что то идет не так, в генерации открытого ключа.. может кто поможет?

Код

#!/usr/bin/perl -w

use strict;
use v5.10;

my $cryptStr = $ARGV[0];
my %alphabet = ("a"=>1,  "b"=>2,  "c"=>3,  "d"=>4, 
                "e"=>5,  "f"=>6,  "g"=>7,  "h"=>8, 
                "i"=>9,  "j"=>10, "k"=>11, "l"=>12, 
                "m"=>13, "n"=>14, "o"=>15, "p"=>16,
                "q"=>17, "r"=>18, "s"=>19, "t"=>20,
                "u"=>21, "v"=>22, "w"=>23, "x"=>24, 
                "y"=>25, "z"=>26, "."=>27, ","=>28,
                " "=>29);
                
#весь текст в нижний регистр, и разбиваем по буквам
$cryptStr = lc($cryptStr);
my @charsStr = unpack("A1" x length($cryptStr), $cryptStr);

#объявляем все нужные ключи и переменные..
my $FirstNumb  = int(rand 50);
my $SecondNumb = int(rand 50);
my $Modul = $FirstNumb*$SecondNumb;
my $PhiFromN = ($FirstNumb-1)*($SecondNumb-1);
my $OpenKey = int(rand 50);
my $SecretKey = &genSecretKey;
my $cryptText = "";

#подбор подходящего ключа
while (!(&relprime($OpenKey, $PhiFromN))) {
    $OpenKey += 2;
}

#проверка на взаимную простоту
sub relprime {
    my $a = $_[0];
    my $b = $_[1];
    while(($a!=0) && ($b!=0)) {
        if ($a>=$b){$a=$a%$b;} 
        else {$b=$b%$a;}    
    }
    if (($a+$b)==1){ return 1;}
    else {return 0;}
}

#алгоритм Эвклида для генерация ключа дешифрования
sub genSecretKey {
    my $u1 = 1;
    my $u2 = 0;
    my $u3 = $PhiFromN;
    my $r1 = 0;
    my $r2 = 1;
    my $r3 = $OpenKey;
    
    while ($r3)
    {
        if(!$r3) {break;}
        
        my $q = int($u3/$r3);
        my $t1 = ($u1-$r1*$q);
        my $t2 = ($u2-$r2*$q);
        my $t3 = ($u3-$r3*$q);
        $u1=$r1;
        $u2=$r2;
        $u3=$r3;
        $r1=$t1;
        $r2=$t2;
        $r3=$t3;
    }
    return $u2;
}


#шифруем текст посимвольно
foreach my $letter (@charsStr){
    my $textForCrypt = $alphabet{$letter};
    $cryptText .= ($textForCrypt**$OpenKey) % $Modul . " ";
}
print "" . $cryptText . "\n";

#меняем в алфавите ключи на значения
my @alphabet_keys = keys %alphabet;
my @alphabet_values = values %alphabet;
%alphabet = ();
@alphabet{@alphabet_values} = @alphabet_keys;

#разбиваем шифрованный текст посимвольно
my $originText = "";
my @cryptText = split(/ /, $cryptText);

#расшифровываем текст по одному символу
foreach my $cryptcode (@cryptText) {
    my $codeOfChar = ($cryptcode**$SecretKey) % $Modul;
    $originText .= $alphabet{$codeOfChar};
}
print $originText . "\n";

PM MAIL WWW ICQ   Вверх
Pfailed
Дата 17.9.2011, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Я делал такое когда учился в универе. Прикладываю свой вариант. Там программа с GUI на GTK2, хотя реализация алгоритма в отдельном модуле, только в модуле этом одна странность: он берет простые числа из базы. Можно это заменить на генерацию чисел с помощью Crypt::Primes, например.
Если нужно, могу порекомендовать книгу, где хорошо описаны эти алгоритмы.


Это сообщение отредактировал(а) Pfailed - 17.9.2011, 15:44

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  rsa.zip 4,58 Kb


--------------------
PM MAIL   Вверх
dixoNICH
Дата 17.9.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Порекомендуйте книгу, пожалста smile
PM MAIL   Вверх
Pfailed
Дата 17.9.2011, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39





--------------------
PM MAIL   Вверх
gcc
Дата 17.9.2011, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



user posted image
PM WWW ICQ Skype GTalk Jabber   Вверх
shamber
Дата 17.9.2011, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



gcc, у мну аж весь экран заняло %)
PM MAIL Jabber   Вверх
rainz
Дата 17.9.2011, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.8.2010

Репутация: нет
Всего: нет



Pfailed Огромное спасибо! А что по коду, может я что то где то неправильно закодил? так хотяб на вскидку? книгу скачал, читаю smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1237 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.