Другие языки программирования и технологии
Прошу помочь. Нужно составить шифр плейфера к следующей фразе "то не останется ничего". Заранее огромное спасибо.
Необходимо для сдачи зачета по информатике. Помогите инвалиду
Это лучше сделать самому, так как не сможете объяснить как получили результат шифрования.
Сам шифр очень прост. Всего 4 правила + ключевая фраза (матрица)
Алгоритм и примеры разжеваны в вики Ссылка
Чуть внимательности и всё получится.
Сам шифр очень прост. Всего 4 правила + ключевая фраза (матрица)
Алгоритм и примеры разжеваны в вики Ссылка
Чуть внимательности и всё получится.
#!/usr/bin/perl6
sub playfair( $key,
$from = 'J',
$to = $from eq 'J' ?? 'I' !! ''
) {
sub canon($str) { $str.subst(/<-alpha>/,'', :g).uc.subst(/$from/,$to,:g) }
# Build 5x5 matrix.
my @m = canon($key ~ ('A'..'Z').join).comb.uniq.map:
-> $a,$b,$c,$d,$e { [$a,$b,$c,$d,$e] }
# Pregenerate all forward translations.
my %ENC = gather {
# Map pairs in same row.
for @m -> @r {
for ^@r X ^@r -> \i,\j {
next if i == j;
take @r ~ @r[j] => @r[(i+1)%5] ~ @r[(j+1)%5];
}
}
# Map pairs in same column.
for ^5 -> $c {
my @c = @m.map: *.[$c];
for ^@c X ^@c -> \i,\j {
next if i == j;
take @c ~ @c[j] => @c[(i+1)%5] ~ @c[(j+1)%5];
}
}
# Map pairs with cross-connections.
for ^5 X ^5 X ^5 X ^5 -> \i1,\j1,\i2,\j2 {
next if i1 == i2 or j1 == j2;
take @m[i1][j1] ~ @m[i2][j2] => @m[i1][j2] ~ @m[i2][j1];
}
}
# Generate reverse translations.
my ЮC = %ENC.invert;
return
anon sub enc($red) {
my @list = canon($red).comb(/(.) (.?) /);
~@list.map: { .chars == 1 ?? %ENC{$_~'X'} !! %ENC{$_} }
},
anon sub dec($black) {
my @list = canon($black).comb(/../);
~@list.map: { ЮC{$_} }
}
}
my (&encode,&decode) = playfair 'Playfair example';
my $orig = "To ne ostanetsya nichego";
say " orig:\t$orig";
my $black = encode $orig;
say "black:\t$black";
my $red = decode $black;
say " red:\t$red";
sub playfair( $key,
$from = 'J',
$to = $from eq 'J' ?? 'I' !! ''
) {
sub canon($str) { $str.subst(/<-alpha>/,'', :g).uc.subst(/$from/,$to,:g) }
# Build 5x5 matrix.
my @m = canon($key ~ ('A'..'Z').join).comb.uniq.map:
-> $a,$b,$c,$d,$e { [$a,$b,$c,$d,$e] }
# Pregenerate all forward translations.
my %ENC = gather {
# Map pairs in same row.
for @m -> @r {
for ^@r X ^@r -> \i,\j {
next if i == j;
take @r ~ @r[j] => @r[(i+1)%5] ~ @r[(j+1)%5];
}
}
# Map pairs in same column.
for ^5 -> $c {
my @c = @m.map: *.[$c];
for ^@c X ^@c -> \i,\j {
next if i == j;
take @c ~ @c[j] => @c[(i+1)%5] ~ @c[(j+1)%5];
}
}
# Map pairs with cross-connections.
for ^5 X ^5 X ^5 X ^5 -> \i1,\j1,\i2,\j2 {
next if i1 == i2 or j1 == j2;
take @m[i1][j1] ~ @m[i2][j2] => @m[i1][j2] ~ @m[i2][j1];
}
}
# Generate reverse translations.
my ЮC = %ENC.invert;
return
anon sub enc($red) {
my @list = canon($red).comb(/(.) (.?) /);
~@list.map: { .chars == 1 ?? %ENC{$_~'X'} !! %ENC{$_} }
},
anon sub dec($black) {
my @list = canon($black).comb(/../);
~@list.map: { ЮC{$_} }
}
}
my (&encode,&decode) = playfair 'Playfair example';
my $orig = "To ne ostanetsya nichego";
say " orig:\t$orig";
my $black = encode $orig;
say "black:\t$black";
my $red = decode $black;
say " red:\t$red";
Похожие вопросы
- Кто сможет написать понятную программу на Pascal ABC? нужно реализовать шифр Плейфера Буду вам очень признателен
- Нужно написать псевдокод кто поможет объяснить задачу чтобы я понял его. заранее огромная спасибо!
- Двоичное число. Может кто знает, а? Двоичному числу 101101 соответствует десятичное число ...Заранее огромное спасибо!
- Помогите,нужно составить на Паскале!
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!
- Помогите пожалуйста я вас о4ень прошу !нужно составить программу в паскале....
- Всем привет! Помогите, пожалуйста, создать блок - схему к следующему коду и заданию. Заранее большое спасибо!
- Срочно помогите..всем 20 баллов,огромное спасибо за ответ.
- Пожалуйста, помогите составить программы для решения следующих задач.
- Помогите пожалуйста составить программы для следующих задач: