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 | 3978x

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

"To, co druzí dělají, může být podnětem našich pocitů, nikoli však jejich příčinou."

M. Rosenberg