JanKoWeb: Odborný SW - Matlab: Vigenerova šifra

Matlab: Vigenerova šifra

Implementace Vigenerovy šifry v Matlabu.



function vystup = vigener(zprava,klic,zasifrovat)
% Vigenerova sifra - kryptovaci funkce
% VSTUP:
%  zprava - retezec, odpovidajici zprave
%   mozne hodnoty: pouze pismena
%  klic - retezec, odpovidajici sifrovacimu klici
%   mozne hodnoty: pouze pismena
%  zasifrovat - volba, zda se ma sifrovat ci desifrovat
%   mozne hodnoty: true|false
%
% Autor: JanKoWeb, jankoweb(at)volny.cz, 2011
%

% Vigenerova sifrovaci tabulka
TAB = ...
    ['ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     'BCDEFGHIJKLMNOPQRSTUVWXYZA';
     'CDEFGHIJKLMNOPQRSTUVWXYZAB';
     'DEFGHIJKLMNOPQRSTUVWXYZABC';
     'EFGHIJKLMNOPQRSTUVWXYZABCD';
     'FGHIJKLMNOPQRSTUVWXYZABCDE';
     'GHIJKLMNOPQRSTUVWXYZABCDEF';
     'HIJKLMNOPQRSTUVWXYZABCDEFG';
     'IJKLMNOPQRSTUVWXYZABCDEFGH';
     'JKLMNOPQRSTUVWXYZABCDEFGHI';
     'KLMNOPQRSTUVWXYZABCDEFGHIJ';
     'LMNOPQRSTUVWXYZABCDEFGHIJK';
     'MNOPQRSTUVWXYZABCDEFGHIJKL';
     'NOPQRSTUVWXYZABCDEFGHIJKLM';
     'OPQRSTUVWXYZABCDEFGHIJKLMN';
     'PQRSTUVWXYZABCDEFGHIJKLMNO';
     'QRSTUVWXYZABCDEFGHIJKLMNOP';
     'RSTUVWXYZABCDEFGHIJKLMNOPQ';
     'STUVWXYZABCDEFGHIJKLMNOPQR';
     'TUVWXYZABCDEFGHIJKLMNOPQRS';
     'UVWXYZABCDEFGHIJKLMNOPQRST';
     'VWXYZABCDEFGHIJKLMNOPQRSTU';
     'WXYZABCDEFGHIJKLMNOPQRSTUV';
     'XYZABCDEFGHIJKLMNOPQRSTUVW';
     'YZABCDEFGHIJKLMNOPQRSTUVWX';
     'ZABCDEFGHIJKLMNOPQRSTUVWXY'];

% uprava vstupu na velka pismena
zprava = upper(zprava);
klic = upper(klic);

% kontrola vstupu
if ( ~((zprava(1,:) >= 65) & (zprava(1,:) <= 90)) )
   %znak v ASCII
   error('Zprava muze obsahovat jen pismena.');
end
%&
if ( ~((klic(1,:) >= 65) & (klic(1,:) <= 90)) )
   %znak v ASCII
   error('Klic muze obsahovat jen pismena.');
end

% inicializace pole vystupu
vystup = [];

% pro i jdouci po 1 do delky zpravy
for i=1:length(zprava)
   % osetreni kratsiho klice nez je delka zpravy
   %  +1 ... Matlab indexuje pole od jedne
   pozice = mod(i-1,length(klic)) + 1;
   if (zasifrovat)
      % koukneme se do sifrovaci tabulky na pozici aktualniho
      % znaku v klici a ve zprave
      % -65 + 1 ... chceme dostat cislo pismene, ale Matlab indexuje pole od 1
      zasifrovane = TAB( klic(pozice)-65 + 1 , zprava(i)-65 + 1 );
      % pridani prvku do vystupniho pole
      vystup = [vystup zasifrovane];
   else
      % najdeme v tabulce sloupec, jehoz index odpovida puvodni zprave
      % -65 + 1 ... chceme dostat cislo pismene, ale Matlab indexuje pole od 1
      desifrovane = find(TAB(klic(pozice)-65 + 1,:) == zprava(i));
      % prevedeme na pismena; zde kvuli indexum Matlabu jednicku odecteme
      desifrovane = char(desifrovane + 65 - 1);
      % pridani prvku do vystupniho pole
      vystup = [vystup desifrovane];
   end
end % end of for

end
Rubrika Odborný SW | Tagy Matlab, Vigenerova, Implementace | Pá 15.04.2011 | 3857x

Související články:

MATLAB: úprava popisku osy x (vydáno Po 13.03.2017, 12:16)
MATLAB: dávková úprava figure (vydáno Po 13.03.2017, 12:12)
MATLAB: divné chování keeplimits u dateaxis (vydáno Po 20.02.2017, 11:52)
MATLAB: otevření složky z MATLABu (vydáno Ne 05.07.2015, 10:23)
MATLAB: error attempt to add "" to a static workspace (vydáno Pá 03.07.2015, 10:23)
MATLAB: spuštění m-file na Linuxu přímo v MATLABu (vydáno So 27.06.2015, 10:23)
MATLAB help generator - File Exchange - MATLAB Central (vydáno Čt 11.06.2015, 10:23)
Matlab: zjištění závislostí a toolboxů dané funkce (vydáno Ne 26.10.2014, 16:13)
Matlab java.lang.OutOfMemoryError  (vydáno So 14.06.2014, 11:31)
Matlab: na Linuxu nejde změnit velikost fontu (vydáno Pá 27.12.2013, 18:55)
Matlab: generátor nápovědy pro funkce (vydáno Čt 31.10.2013, 16:51)
Matlab: tipy a triky pro práci se strukturami (vydáno Út 13.08.2013, 13:53)
Matlab: práce s error, warning a try catch (vydáno Po 05.08.2013, 13:48)
Matlab: prohlížeč obrázků (vydáno Čt 01.08.2013, 22:23)
Matlab: skrytí warning (vydáno Čt 18.07.2013, 14:59)
MATLAB: vícenásobná substituce proměnné v matici (vydáno Út 12.03.2013, 12:46)
Matlab a LaTeX: rychlý export matice do LaTeXu (vydáno St 24.10.2012, 10:12)
Matlab: praktické tipy pro práci s figurami (grafy) (vydáno St 14.12.2011, 10:30)
Matlab: praktické rady pro ladění kódu aneb Debug mode (vydáno Ne 11.12.2011, 19:24)
Matlab: zkratky pro často se opakující příkazy přímo v toolbaru (vydáno Ne 20.11.2011, 18:32)
Matlab: převod výrazu do formátu LaTeXu (vydáno Út 17.05.2011, 23:12)
Matlab: Vigenerova šifra (vydáno Pá 15.04.2011, 10:44) - právě čtete
Matlab: instalace na Linuxu UBUNTU (vydáno Pá 25.02.2011, 18:03)
Matlab: úpravy výrazů (vydáno St 23.02.2011, 18:03)
Matlab: export grafu do pdf (vydáno So 05.02.2011, 23:58)
Matlab: TODO, FIXME a cell mode (vydáno Pá 10.12.2010, 17:36)
Matlab: defaultní nastavení grafu (vydáno Út 16.11.2010, 12:31)
Matlab: přehled exportů grafického výstupu (vydáno Pá 09.07.2010, 16:37)
Matlab - funkce pro textový výstup (vydáno So 13.03.2010, 19:39)
Matlab - práce s řetězci (vydáno Čt 22.10.2009, 17:03)

Náhodné články

Tento web jsem zakládal na střední, v roce 2008. Je zde hlavně archiv mé tvorby.

Aktuální věci publikuji kvůli úspoře času na Twitter.

Honza

"K tomu, abychom mohli empatii dávat, potřebujeme ji sami dostávat."

M. Rosenberg