Vigenère chiffer
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 10 juni 2020; kontroller kräver
18 redigeringar .
Vigenère-chiffret ( fr. Chiffre de Vigenère ) är en metod för polyalfabetisk kryptering av bokstavlig text med hjälp av ett nyckelord. [ett]
Denna metod är en enkel form av polyalfabetisk substitution. Vigenère-chifferet har uppfunnits många gånger. Denna metod beskrevs först av Giovan Battista Bellaso ( italienska Giovan Battista Bellaso ) i boken La cifra del. Sig. Giovan Battista Bellas® 1553 [2] , men på 1800-talet fick han namnet Blaise Vigenère [3] , en fransk diplomat. Metoden är enkel att förstå och implementera, men är otillgänglig för enkla kryptoanalysmetoder . [fyra]
Även om chiffret är lätt att förstå och implementera, har det i tre århundraden stått emot alla försök att bryta det; som fick namnet le chiffre indéchiffrable ( fr. olöst chiffer ). Många människor har försökt implementera krypteringsscheman som i huvudsak är Vigenère-chiffer. [5]
Historik
1466 lämnade Leon Alberti , den berömda arkitekten och filosofen, en avhandling om chiffer till det påvliga kontoret. Avhandlingen diskuterar olika metoder för kryptering, inklusive maskering av klartext i någon hjälptext. Verket avslutas med hans eget chiffer, som han kallade "ett chiffer lämpligt för kungar". Det var ett polyalfabetiskt chiffer implementerat som en chifferskiva. Summan av kardemumman är att detta chiffer använder flera substitutioner i enlighet med nyckeln. Alberti uppfann senare dechiffreringskoden. Denna uppfinning var långt före sin tid, eftersom denna typ av chiffer började användas i europeiska länder bara 400 år senare. [6]
År 1518 togs ett nytt steg i utvecklingen av kryptografi med uppkomsten i Tyskland av den första tryckta boken om kryptografi. Abbot Johann Trithemius, abbot i klostret i Würzburg, skrev boken "Polygraphy", som beskriver ett antal chiffer. En av dem använder " Tritemius-tabellen " (nu "Vigenère-tabellen") och utvecklar idén om polyalfabetisk substitution. Krypteringssystemet är som följer: den första bokstaven i källtexten krypteras av den första raden, den andra med den andra, och så vidare. Efter att ha använt den sista raden krypteras nästa bokstav igen på den första raden. Det finns ingen nyckel i Trithemius-chifferet, hemligheten är själva krypteringsmetoden. [fyra]
Nästa steg i utvecklingen av den krypteringsmetod som Trithemius föreslagit gjordes av italienaren Giovanni Belazo. 1553 publicerades hans broschyr Cipher of Signor Belazo. I detta chiffer är nyckeln det så kallade lösenordet - en fras eller ett ord. Lösenordet skrevs med jämna mellanrum över bokstäverna i klartext. Lösenordets bokstav, ovanför motsvarande bokstav i klartexten, angav numret på raden i Trithemius-tabellen, enligt vilken bytet (kryptering) av detta brev skulle utföras. [fyra]
Därefter utvecklades idéerna om Trithemius och Belazo av Belazos landsman Giovanni Battista Porta . Han föreslog att överge den alfabetiska ordningen för bokstäverna i den första raden i Trithemius-tabellen och ersätta denna ordning med någon godtycklig, som är chiffernyckeln. Tabellraderna var fortfarande cykliskt förskjutna. I sin bok On Secret Correspondence (publicerad 1563 [6] ) föreslog Porta ett bigramchiffer och gav också en beskrivning av en mekanisk diskenhet som implementerar en bigramersättning. [fyra]
I mitten av 1500-talet kom G. Cardanos bok "Om subtiliteter" i Italien med tillägget "Om olika saker". Nya idéer om kryptografi återspeglades där: användningen av en del av den överförda klartexten som en chiffernyckel (idén om "självnyckeln") och en ny krypteringsmetod som gick till historien som " Cardano galler ". [fyra]
Den franska ambassadören i Rom , Blaise de Vigenère , blev också intresserad av kryptografi, efter att ha blivit bekant med verk av Trithemius, Belazo, Cardano, Porta, Alberti. År 1585 skrev han en avhandling om chiffer, som beskriver grunderna för kryptografi. I detta verk anmärker han: ”Alla ting i världen är ett chiffer. Hela naturen är bara ett chiffer och ett hemligt brev." Denna idé upprepades senare av Blaise Pascal , en av grundarna av sannolikhetsteorin, och på 1900-talet av Norbert Wiener , "kybernetikens fader". [fyra]
Faktum är att Vigenère kombinerade Trithemius, Bellazeau, Ports tillvägagångssätt för kryptering av klartexter, i huvudsak utan att införa något original i dem. I vår tid har "Vigenère-chifferet", bestående av den periodiska fortsättningen av nyckelordet på Trithemius bord, ersatt namnen på sina föregångare. [4] David Kahn , i sin bok The Codebreakers, ogillade detta och skrev att historien "ignorerade ett viktigt faktum och döpte chifferet efter Vigenère, trots att han inte gjorde något för att skapa det" [7] .
Vigenère-chifferet hade ett rykte om sig att vara exceptionellt resistent mot "manuell" sprickbildning. Den berömda författaren och matematikern Charles Lutwidge Dodgson ( Lewis Carroll ) kallade Vigenère-chifferet okrossbart i sin artikel The Alphabetical Chipher . The Alphabet Chipher , publicerad i en barntidning 1868. 1917 hänvisade Scientific American också till Vigenère-chifferet som okrossbart. [8] Denna föreställning motbevisades efter att Kasiski fullständigt bröt chifferet på 1800-talet, även om chifferet är känt för att ha brutits av några erfarna kryptoanalytiker redan på 1500-talet. [7]
Vigenère-chifferet är enkelt nog att användas i fält, speciellt om chifferskivor används. Till exempel använde "förbundsmedlemmarna" en kopparchifferskiva för Vigenère-chifferet under inbördeskrigets gång . De konfedererade meddelandena var långt ifrån hemliga, och meddelanden hackades regelbundet av deras motståndare. Under kriget förlitade sig det konfedererade kommandot på tre nyckelfraser: "Manchester Bluff", "Complete Victory" och - när kriget närmade sig sitt slut - "Come Retribution". [7]
Gilbert Vernam försökte förbättra det spruckna chifferet (det kallades Vernam-Vigenère-chifferet 1918), men trots hans förbättringar förblev chifferet sårbart för kryptoanalys . Men Vernams arbete resulterade så småningom i Vernam-chifferet , som verkligen är omöjligt att bryta. [9]
Beskrivning
I Caesar-chifferet förskjuts varje bokstav i alfabetet med flera positioner; till exempel, i ett Caesar-chiffer, med en förskjutning på +3, skulle A bli D, B skulle bli E, och så vidare. Vigenère-chiffret består av en sekvens av flera Caesar-chiffer med olika skiftvärden. För kryptering kan en tabell med alfabet som kallas tabula recta eller Vigenères kvadrat (tabell) användas. När det gäller det latinska alfabetet är Vigenère-tabellen uppbyggd av rader med 26 tecken vardera, med varje nästa rad förskjuten med flera positioner. Det finns alltså 26 olika Caesar-chiffer i tabellen. Varje steg av krypteringen använder olika alfabet, valda beroende på nyckelordets karaktär. Anta till exempel att källtexten ser ut så här:
ATTACKATDAWN
Personen som skickar meddelandet skriver nyckelordet (" LEMON ") i en slinga tills dess längd matchar längden på originaltexten:
CITROLEN
Det första tecknet i klartexten ("A") krypteras med sekvensen L, som är det första tecknet i nyckeln. Det första tecknet i chiffertexten ("L") är i skärningspunkten mellan rad L och kolumn A i Vigenère-tablået. På liknande sätt, för det andra tecknet i källtexten, används det andra tecknet i nyckeln; det vill säga det andra tecknet i chiffertexten ("X") erhålls vid skärningspunkten mellan rad E och kolumn T. Resten av klartexten krypteras på liknande sätt.
Originaltext: ATTACKATDAWN
Nyckel: LEMONLEMONLE
Chiffertext: LXFOPVEFRNHR
Dekryptering utförs enligt följande: vi hittar i Vigenère-tabellen raden som motsvarar det första tecknet i nyckelordet; i denna sträng hittar vi det första tecknet i chiffertexten. Kolumnen där detta tecken finns motsvarar det första tecknet i källtexten. Följande chiffertexttecken dekrypteras på liknande sätt.
Om är antalet bokstäver i alfabetet, är numret på klartextbokstaven, är numret på nyckelbokstaven i alfabetet, så kan Vigenère-chiffret skrivas enligt följande:



Och dekryptering:
[tio]
I en dator motsvarar en sådan operation tillägget av ASCII-koderna för meddelandetecknen och nyckeln modulo some. Det verkar som om tabellen är mer komplex än den cykliska förskjutningen av rader, kommer chifferet att bli mer tillförlitligt. Detta gäller om det ändras oftare, till exempel från ord till ord. Men sammanställningen av sådana tabeller, som är latinska kvadrater, där vilken bokstav som helst förekommer en gång i rad eller kolumn, är mödosam och bör endast göras på en dator. För ett manuellt polyalfabetiskt chiffer förlitar de sig endast på nyckelns längd och komplexitet, med hjälp av den givna tabellen, som inte kan hållas hemlig, och detta förenklar kryptering och dekryptering. [elva]
Applikation
På 1800-talet blev den så kallade pad-krypteringsmetoden utbredd. Den användes av populistiska revolutionärer , spioner, etc. Chifferet använder fraser hämtade från språket som krypteringsnyckel. Till exempel frasen: "14 juli - Marys födelsedag." Om vi använder numreringen av bokstäverna i det engelska alfabetet som accepteras som exempel, betyder Marysbirthday . För att kryptera frasen Iamgoing ↔ läggs mod26-texten till nyckeln, som är den inspelade frasen. Det visar sig



↔ UADEGJV X.
Som du kan se är detta i det här fallet vanligt spelande . Den franske kryptografen Vigenère föreslog att man skulle använda den här typen av nyckel även i de fall där texten är längre än nyckeln, och påtvinga den så många gånger som nödvändigt. I det här fallet är det inte alls nödvändigt att nyckeln erhålls från en meningsfull fras. Dessutom är det till och med oönskat, eftersom meningsfullhet kan hjälpa chiffrets knäckare. Ta till exempel texten:
EN RÖK AV FODERLAND ÄR SÖT FÖR OSS OCH TREVLIG ↔ och nyckel: .

Kryptering erhålls av gamma mod26:
- Pt:

- nyckel:

- Ct:

- Pt:

- nyckel:

- Ct:

Så, Vigenère-chifferet erhålls som en upprepande kombination av skift. I allmänhet bevarar detta chiffer inte frekvensen av förekommande bokstäver och kan av denna anledning inte direkt utsättas för statistisk analys.
Kryptanalys
Vigenère-chiffret "suddar ut" frekvensegenskaperna för teckens utseende i texten, men vissa drag av utseendet av tecken i texten finns kvar. Den största nackdelen med Vigenère-chifferet är att dess nyckel upprepas. Därför kan en enkel kryptoanalys av ett chiffer byggas upp i två steg:
- Sök efter nyckellängd. Det är möjligt att analysera fördelningen av frekvenser i chiffertexten med olika decimering. Det vill säga, ta en text som inkluderar var 2:a bokstav i chiffertexten, sedan var 3:e, etc. Så fort fördelningen av bokstavsfrekvenser skiljer sig mycket från uniform (till exempel i entropi), så kan vi prata om den hittade nyckellängden .
- Kryptanalys. En uppsättning av l Caesar-chiffer (där l är den hittade nyckellängden), som individuellt lätt kan knäckas.
Friedman- och Kasiska-testerna kan hjälpa till att bestämma nyckellängden.
Kasiska-testet och hur det bestämmer nyckellängden
Charles Babbage var den första som utvecklade en attackalgoritm för Vigenère-chifferet 1854. Drivkraften för utvecklingen av algoritmen var en brevväxling med John H. B. Thwaites. Han påstod sig ha skapat ett nytt chiffer och lämnat in det till Journal of the Society of the Arts; När Babbage visade att Thwaites-chifferet bara var ett specialfall av Vigenère-chifferet, bad Thwaites honom att knäcka det. Babbage dechiffrerade texten, som visade sig vara dikten "The Vision of Sin" av Alfred Tennyson , krypterad med sökordet Emily - namnet på poetens fru. Men han publicerade inte sin upptäckt. Därför är denna algoritm uppkallad efter Friedrich Wilhelm Kasiska , en preussisk arméofficer som, oberoende av Babbage, utvecklade samma algoritm 1863. Och först på 1900-talet, när forskare studerade Babbages anteckningar, visades information om den första uppfinnaren av denna algoritm. [12]
Först definierar vi begreppet sammanfallsindex för en given text. Låt texten anses motsvara alfabetet som består av bokstäver. Låt vara längden på denna text. Beteckna med antalet förekomster av bokstaven med siffran i texten . Då definieras textmatchningsindex som








.
Det har verifierats empiriskt att matchindexet för långa, meningsfulla engelska texter, såsom Mellvilles Moby Dick , är ungefär 0,065. I det här fallet finns naturligtvis bara 26 bokstäver i det engelska alfabetet kvar i texten. Samtidigt är en helt slumpmässig, ganska lång text på 26 bokstäver, där alla bokstäver förekommer ungefär lika många gånger, lika med 0,038. Det märks att ju mer "meningsfull" texten är, desto högre är dess sammanfallsindex. Denna omständighet hjälper bara till att beräkna nyckellängden i Vigenère-chifferet.
Låt vara den ursprungliga texten, i vilken är dess th bokstav, och är dess Vigenère chiffer. Om en normal förskjutning tillämpas, det vill säga nyckellängden , måste likheten gälla , eftersom endast antalet bokstäver ändras, men inte numret på deras förekomster. Eftersom det är en meningsfull (genom antagande) text kommer värdet på , att vara ungefär lika med standardvärdet på , för det givna språket. Ett exempel på vanlig engelska övervägs därför . Naturligtvis är det osannolikt att Vigenère-chifferet kommer att erhållas i det allmänna fallet med en nyckel med längden 1. Därför beräknas följande matchningsindex sekventiellt:
tills .

















Detta kan indikera att nyckellängden är , även om det kan vara ett falskt spår.

Faktum är att om nyckellängden är lika med , kommer texten att erhållas från skiftet, därför kommer den att lagra , och texten är i sin tur ett slumpmässigt urval av meningsfull text, därför måste den bevara sina statistiska egenskaper, i synnerhet matchindex.





Om matchningsindexet för något språk är okänt, är det också möjligt att använda Kasiski-testet. Det är nödvändigt att inte jämföra de mottagna värdena för sammanfallsindexen med standardvärdet, utan att se när detta index ökar kraftigt. Detta kan signalera en hittad nyckellängd. Vi pratar förstås om att tyda meningsfulla och samtidigt ganska långa texter. Men begreppet meningsfullhet för formella språk är inte ett lätt begrepp.
En annan tillämpning av Kasiski-testet är att kontrollera att frekvenserna för bokstäverna som påträffas i kryptering bevaras. Låt vara chiffertexten, och krypteringsalgoritmen är okänd. Om det är känt att det normala engelska alfabetet användes och värdet är nära 0,065, så tyder det på att ett frekvensbevarande chiffer användes. Det är möjligt att detta är ett enkelt substitutionschiffer. I en situation där värdet är långt ifrån 0,065 kan man anta att det använts ett chiffer som inte bevarade frekvensen, eller texten var meningslös, eller ett annat alfabet användes etc. Med ett ord visade sig något vara fel och en djupare analys behövs. .



Låt oss gå tillbaka till Vigenère-chiffret. Låt oss korrekt definiera nyckellängden lika med . Nu måste du hitta själva nyckeln.

Ett histogram byggt enligt standardfrekvensen för bokstäver i ett språk har sina egna särdrag. De förklaras av den extremt ojämna användningen av bokstäver på engelska. Denna ojämnhet gör det bara möjligt att effektivt tillämpa frekvensanalys.
Först av allt, "topparna" som motsvarar bokstäverna A, E, H, I, N, O, R, S, T och "stubbarna" som motsvarar J, Q, X, Z drar till sig uppmärksamhet. bredvid finns det till och med en hel trio: R, S, T. Allt tillsammans ger en mycket specifik lättnad.
Om en förskjutning på 4 används, ändras bilden cykliskt. Det finns en cyklisk lättnadsförskjutning med 4 enheter. Om du inte vet storleken på förändringen är det inte svårt att återställa det, styrt av sunt förnuft.
Roterande maskiner
Det är möjligt att förbättra Vigenère-chiffret genom att betrakta en kombination av godtyckliga substitutioner som en upprepande nyckel: . Detta innebär att enheterna i källtexten konverteras till enheter respektive i etc.





När man bryter ett sådant chiffer, som i fallet med Vigenère-chifferet, måste man först bestämma nyckellängden . Detta kan göras med hjälp av Kasiski-testet på samma sätt som i det beskrivna fallet. Vidare kan frekvensanalys tillämpas för att bestämma substitutionerna.


Frekvensanalys
När nyckelns längd är känd kan chiffertexten skrivas i flera kolumner, var och en motsvarar ett tecken i nyckeln. Varje kolumn består av originaltexten, som är krypterad med ett Caesar-chiffer ; nyckeln till Caesar-chifferet är bara ett tecken i nyckeln för Vigenère-chifferet, som används i den här kolumnen. Genom att använda tekniker som liknar de för att bryta Caesar-chifferet, kan chiffertexten dekrypteras. En förbättring av Kasiskas test, känd som Kirchhoff-metoden, jämför frekvensen av förekomst av tecken i kolumner med frekvensen av förekomst av tecken i källtexten för att hitta nyckeltecknet för den kolumnen. När alla tecken i nyckeln är kända kan kryptoanalytikern enkelt dechiffrera chiffertexten från klartexten. Kirchhoffs metod är inte tillämplig när Vigenère-tabellen är förvrängd istället för att använda den vanliga alfabetiska sekvensen, även om Kasiska-testet och matchningstesterna fortfarande kan användas för att bestämma nyckellängden för detta fall. [13]
Omnämnanden i litteraturen
1881 skrev Jules Verne romanen Jangada . I den här romanen använde författaren Vigenère-chifferet för att kryptera dokumentet. Som chiffertext använder författaren följande dokument:
SGUCHPVELLZIRTEPNDNFGINBORGYUGLCHD
KOTKHZHGUUMZDHRЪSGSYUDTPЪARVYGGISCHVCH
EECSTOUZHVSEVHAHYAFBBETFZSEFTHZHZBZ
ЪGFBSCHKHRPZhTZVTZJYTGOYBNTFFEOICHT
TEGIIOKZPTFLEUGSFIPTMOFOXHMGBT
JFYGUCHOYUNFNSHZGELLSHRUDENKOLGGNSBK
SSEUPNFTSEEEGGSJNOYIONRSITKTSEDB
UBTETLOTBFTSSBYPMPZTZHPTUFKDG
Under berättelsens gång hittar hjältarna ett fragment av det dechiffrerade ordet för detta dokument: ORTEGA Hjältarna gissade att detta namn kunde betyda signaturen i slutet av dokumentet. Så kommer det ut:
O R T E G A

T U V K D G
Därför är nyckeln 432513. Genom att känna till nyckeln kan du enkelt översätta detta dokument:
DEN VERKLIGA ORSAKEN TILL DIAMANTSTÖLDET

SGUCHPVELL ZIRTEPND NFGIN BORGYUG
OCH DÖDANDET AV SOLDATER AV SKYDDET I NATTEN PÅ

L CHDKOTKHZHG UUMZDH RЪSGSYu D TPIA RV
DEN TJUGUANDRA TUSEN JANUARI

YGGISCHVCHE ETSSTUZH VSEVHA HYAFBBB
ÅTTAHUNDRA TJUGOSJÄTTE

ETFZSEFTKh ZHZBZЪGFB SCHIKHHRIP ZHTZV
INTE JOAM DACOSTA, ORÄTTIG VID

TJ YTGO YBNTFFFE OIKHTTEGIIIOKZP TFL
TALAT TILL DÖDEN, OCH JAG, OLYCKLIG

EUGSFIPTM O FOKSHM G B TJFYGUCHOYUN
ANSTÄLLD PÅ DIAMANTAVDELNING

FNSHZGALL SCHRUDENKOLG GNSBCSSEU
GREVSKAP; JA, JAG ÄR EN, I VAD OCH SIGNATER

PNFTSEE EG G SZHNO OCH YIO N RSITKTS
KRIG I MITT RIKTIGA NAMN,

EDBUB TETLO TBFTSSBUYP MPZTZHP
ORTEGA

TUFKDG
Alternativ
Det finns många andra minnesvärda rutor som kan användas som grund för ett polyalfabetiskt system på samma sätt som Vigenère-torget. En av de mest kända är torget Beaufort . Dess linjer är linjerna på Vigenère-torget, skrivna i omvänd ordning. Den är uppkallad efter amiral Sir Francis Beaufort , uppfinnaren av vindhastighetsskalan. Om den första raden och kolumnen i Vigenère-torget pekar på rader respektive kolumner, så tjänar den första raden och den sista kolumnen i Beaufort-torget dessa syften. [fjorton]
Den löpande nyckelvarianten av Vigenère-chifferet var en gång okrossbar. Den här versionen använder ett textblock lika lång som den ursprungliga texten som nyckel. Eftersom nyckeln är lika lång som meddelandet fungerar inte de metoder som Friedman och Kasiski föreslagit (eftersom nyckeln inte upprepas). År 1920 var Friedman den första som upptäckte nackdelarna med detta alternativ. Problemet med den löpande nyckeln för Vigenère-chifferet är att kryptoanalytikern har statistisk information om nyckeln (med tanke på att textblocket är skrivet på ett känt språk) och denna information kommer att återspeglas i chiffertexten. Om nyckeln verkligen är slumpmässig, dess längd är lika med längden på meddelandet, och den användes en gång, då kommer Vigenère-chifferet teoretiskt att vara okrossbart, i själva verket kommer detta alternativ redan att vara Vernam-Vigenère-chifferet, för vilket absolut kryptografisk styrka har bevisats.
Trots den uppenbara styrkan hos Vigenère-chifferet användes det inte i stor utsträckning i Europa. Vanligare var Gronsfeld-chifferet , skapat av greve Gronsfeld, identiskt med Vigenère-chifferet förutom att det bara använde 10 olika alfabet (motsvarande siffrorna 0 till 9). Fördelen med Gronsfeld-chifferet är att inte ett ord används som nyckel, utan en digital sekvens som upprepas tills den blir lika med längden på det krypterade meddelandet. Gronsfeld-chifferet användes flitigt i hela Tyskland och Europa trots dess brister.
Implementering
JavaScript
Koden
//Du kan kopiera och klistra in all denna kod i din webbläsarkonsol.
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //Alphabet string
var m = "ATTACKATDAWN" ; //Message
var k = "LEMON" ; //Nyckel
function Vizhener ( m , k , mode ){ //(kryptera/dekryptera) för "Gronsfeld" + "Vizhener" + "Beaufort" + "Shifted Atbash"
//m - meddelande eller chiffertext (kan också vara en nyckel om Beaufort chiffer ),
//k - nyckel (eller meddelande/chiffertext om Beaufort chiffer),
//mode - mode:
// Kryptering: "kryptera" (standard),
// Dekryptering: "dekryptera" (läge === 'dekryptera ' ),
// Kryptering-dekryptering enligt den skiftade atbash-tabellen: (mode==='shifted_atbash')
// Extrahera siffror från Gronsfeld-chiffernyckeln: "gronsfeld" eller "gronsfeld_encrypt", "gronsfeld decrypt".
var maxlength = Math . max ( m . längd , k . längd );
var r = '' ; //Tom resultat
för ( i = 0 ; i < maxlength ; i ++ ){ //encrypt/decrypt
//Vizhener - kryptera/dekryptera ett forum (kryptera - som standard; dekryptera - när (läge === 'dekryptera' )
var mi = a . indexOf ( m [ ( ( i >= m . längd ) ? i % m . längd : i ) ] ); //fit message/ciphertext - to key (om less)
var ki_s = k [ ( i >= k . length ) ? i % k . length : i ) ] ; //passa in nyckeln till meddelandet/chiffertexten (om kort) var ki = ( typ av läge !== 'odefinierat' && läge . indexOf ( 'gronsfeld' ) !== - 1 ) ? parseInt ( ki_s ) : a . indexOf ( ki_s ); //subtraktion under dekryptering eller addition. ki = ( ( typ av läge !== 'odefinierat' && läge . indexOf ( 'dekryptera' ) !== - 1 ) ? ( - ki ) : ki ); c = a [ ( ( ( a . längd + ( mi + ki ) ) % a . längd ) ) ]; //symbol enligt Vigenère-tabellen. c = ( läge === 'shifted_atbash' ) ? a [ a . längd - 1 - a . indexOf ( c )] : c ; // Atbash karaktär eller karaktär. r += c ; //Lägg till ett tecken till resultatet. } returnera r ; //retur resultatsträng }
//Tester:
//ett. Gronsfeld chiffer. (En trunkerad version av Vigenère-chifferet).
//Parametrar: m - meddelande/chiffertext, k - nyckel (endast siffror), läge - "kryptera/dekryptera"
konsol . log (
'\n\n1. Gronsfeld-chiffer (avskalad version av Vigenère-chiffer med digital nyckel):'
, '\n' + 'm = ' , 'GRONSFELD' , ' - meddelande'
, '\n' + 'k = ' , '2015' , '- key'
, '\n' + 'Gronsfeld chiffer - kryptering: '
, Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ) //producerar IRPSUFFQF - chiffer av Gronsfeld
, '\n ' + 'Gronsfeld chiffer - dekryptera: '
, Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld decrypt' ) //kommer att producera GRONSFELD - från gronsfelds chiffer
, '\ n' + 'Jämför med meddelande: ' , "( dekrypterad === m )"
, ( Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld_decrypt' ) === ' GRONSFELD' ) // m?true
);
//2. I stället för siffror, i Gronsfeld-chifferet, är det också möjligt att ange bokstäver.
//Då kommer Gronsfeld-chifferet att vara ett vanligt Vigenère-chiffer, men med en teckenbegränsning per nyckel.
//Till exempel, med alla möjliga siffror i nyckeln "0123456789", kan nyckeln bara vara från bokstäverna "ABCDEFGHIJ"
//Du kan få det så här:
var Gronsfeld_key = '2015' ;
var Vizhener_key = Gronsfeld_key . dela ( '' ). map ( function ( x ) { return a [ parseInt ( x )]}). gå med ( '' ); //CABF
//Och vice versa:
var Gronsfeld_key2 = Vizhener_key . dela ( '' ). map ( function ( x ) { return a . indexOf ( x )}). gå med ( '' ); //2015
//Här är de, i konsolen:
console . log (
'\n2. Konvertera Gronsfeld-nyckel till Vizhener-nyckel:'
, '\nGronsfeld_key' , Gronsfeld_key
, '\n' + 'to Vizhener_key' , Vizhener_key
, '\n' + 'och tillbaka:' , Gronsfeld_key2
);
//3. Då är krypterings-dekrypteringen av Gronsfeld-chifferet ett arbete med Vigenère-chifferet:
console . log (
"\n3. Gronsfeld-chiffer - med Vigenère-nyckel, enligt Vizhener-tabellen:"
, '\n' + 'm = ' , 'GRONSFELD' , ' - meddelande'
, '\n' + 'k = ' , Vizhener_key , '- nyckel'
, '\n' + 'Gronsfeld chiffer - kryptering: '
, Vizhener ( 'GRONSFELD' , Vizhener_key ) //producerar IRPSUFFQF - Beaufort chiffer
, '\n' + 'Gronsfeld chiffer - dekryptering:'
, Vizhener ( Vizhener ( 'GRONSFELD' , Vizhener_key ), Vizhener_key , 'decrypt' ) //Ger GRONSFELD - från Beaufort chiffer.
, '\n' + 'Jämförelse med meddelande: ' , "(dekrypterad === m )"
, ( Vizhener ( Vizhener ( 'GRONSFELD' , Vizhener_key ), Vizhener_key , 'decrypt' ) === 'GRONSFELD' ) //'GRONSFELD'? sant
);
//fyra. Vigenère-chiffer (fullständig version):
//Parametrar: m - meddelande/chiffertext, k - nyckel, mode - "kryptera"/"dekryptera"
konsol . logg (
'\n4. Vigenère-chiffer (full version):'
, '\n' + 'm = ' , m , ' - meddelande'
, '\n' + 'k = ' , k , '- nyckel'
, ' \n' + 'Vigenère-chiffer - kryptering: ' , Vizhener ( m , k ) //producerar LXFOPVEFRNHR - Vigenère-chiffer
, '\n' + 'Vigenère-chiffer - dekryptering: '
, Vizhener ( Vizhener ( m , k ), k , 'dekryptera' ) //kommer att ge ATTACKATDAWN - från Vizhener chiffer
, '\n' + 'Jämförelse med meddelande: ' , "( dekrypterad === m )"
, ( Vizhener ( Vizhener ( m , k , 'kryptera' ), k , 'dekryptera' ) === m ) //m?true
);
//5. Beaufort-chifferet - genom Vigenère-chifferet (det finns en annan tabell och chiffertext - skiftade atbash längs linjerna).
//Parametrar: m - nyckel, k - meddelande/chiffertext, mode - 'dekryptera' (endast dekryptering)
//Det speciella med Beaufort-chifferet är att dekryptering är omkryptering av chiffertexten - med samma nyckel.
//Det vill säga samma operation.
konsol . log (
"\n5. Beaufort-chiffer (i tabellen - atbash rad för rad):"
, '\n' + 'm = ' , m , ' - meddelande'
, '\n' + 'k = ' , k , '- nyckel'
, '\n' + 'Beaufort-chiffer - Vigenère-tabellkryptering: '
, Vizhener ( k , m , 'dekryptera' ) //producerar LLTOLBETLNPR - Beaufort-chiffer
, '\n' + 'Beaufort-chiffer - Vigenère-tabelldekryptering :'
, Vizhener ( k , Vizhener ( k , m , 'dekryptera' ), 'dekryptera' ) //ge ATTACKATDAWN - från Beaufort chiffer.
, '\n' + 'Jämförelse med meddelande: ' , "( dekrypterad === m )"
, ( Vizhener ( k , Vizhener ( k , m , 'dekryptera' ), 'dekryptera' ) === m ) //m? sant
);
//6. Skiftad atbash - genom Vigenère-chifferet (det finns en annan tabell och chiffertext - atbash, skiftad i rader i kolumner).
//Parametrar: m eller k - meddelande/chiffertext och nyckel (eller vice versa), mode - 'shifted_atbash' (endast kryptera + atbash till resultatet)
//Inte bara är samma operation (dekryptering - det finns kryptering av chiffertexten) ), men den är också kommutativ.
//Det vill säga, här kan de n:te bokstäverna (i meddelandet/chiffertexten) och nyckeln - bytas, vilket ger samma resultat.
//Det är just detta, den förskjutna atbashen - som närmar sig Vernam-chifferet,
//eftersom när man dekrypterar med Vernam-chifferet spelar XOR-operationen ingen roll var nyckelbyten är och var chiffertextbyten finns.
konsol . log (
"\n6. Skiftade atbash (i atbash-tabellen, flyttade både rader och kolumner):"
, '\n' + 'm = ' , m , ' - meddelande'
, '\n' + 'k = ' , k , '- key'
, '\n' + 'Skiftad atbash - Vigener-tabellkryptering: '
, Vizhener ( m , k , 'shifted_atbash' ) //Ger OCULKEVUIMSI - skiftat atbash-chiffer.
, 'Ersättningskommutativitetstest: '
, Vizhener ( k , m , ' shifted_atbash ' ) // Samma, oavsett var nyckeln är och var meddelandet är.
, ' \n' + ' Shifted atbash - dekryptering med hjälp
av Vizhener- tabellen : / _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ / Samma, oavsett var nyckeln är, men var chiffertexten är. , '\n' + 'Jämförelse med meddelandet: ' , "( dekrypterad === m )" , ( Vizhener ( k , Vizhener ( k , m , 'shifted_atbash ' ) , ' shifted_atbash ' ) === m ) // m ? _ _ _ _ _ _ _ _ _ ifted_atbash' ) === Vizhener ( k , m , 'shifted_atbash' )) && ( Vizhener ( Vizhener ( k , m , 'shifted_atbash' ), k , ' shifted_atbash' ) === Vizhener ( k , Vizhener ( k ) , 'shifted_atbash' ), 'shifted_atbash' ) ) ) //Kommutativitet? sant );
Delphi 10
Koden
program Vigenere ;
använder
System . SysUtils , Winapi . Windows ;
const
cmGronsfeld : Byte = 1 ;
cmShiftedAtbash : Byte = 2 ;
cmDecrypt : Byte = 4 ;
YesNo : array [ Boolean ] of string = ( 'no' , 'yes' ) ;
var
log : TStringBuilder ;
function VigenereCrypt ( m , k : sträng ; läge : Byte = 0 ) : sträng ;
const
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Alphabet string
var
maxLength , i , mi , ki , ix : Heltal ;
r , ki_s , c : sträng ;
gronsfeld , shiftedAtbash , dekryptera : Boolean ;
börja
//(kryptera/dekryptera) för "Gronsfeld" + "Vigenere" + "Beaufort" + "Shifted Atbash"
//m - meddelande eller chiffertext (kan vara nyckel om Beaufort chiffer),
//k - nyckel (eller meddelande/ chiffertext om Beaufort chiffer),
//mode - mode:
// Kryptera: "kryptera" (standard),
// Dekryptera: "dekryptera" (läge === 'dekryptera'),
// Kryptera-dekryptera med skiftad atbash-tabell: (mode = cmShiftedAtbash)
// Extrahera siffror från Gronsfeld chiffernyckel: "gronsfeld" eller "gronsfeld_encrypt", "gronsfeld decrypt".
maxLängd := m . Längd ;
om k . Längd > maxLängd sedan maxLängd := k . Längd ;
Resultat := '' ; //Tom resultat
gronsfeld := ( läge och cmGronsfeld ) > 0 ;
shiftedAtbash := ( läge och cmShiftedAtbash ) > 0 ;
dekryptera := ( läge och cmDecrypt ) > 0 ;
för i := 0 till maxlängd - 1 börjar // kryptera/dekryptera
//Vigenere - kryptera/dekryptera ett forum (kryptera - som standard; dekryptera - när (cmDecrypt är i läge) )
//passa meddelande/chiffertext - till nyckel (om mindre)
om i >= m . längd sedan ix := i mod m . Längd annars ix := i ;
mi := a . IndexOf ( m [ ix + 1 ]) ;
om jag >= k . längd sedan ix := i mod k . Längd annars ix := i ;
ki_s := k [ ix + 1 ] ;
//passa in nyckeln till meddelandet/chiffertexten (om kort)
om gronsfeld så ki := ki_s . ToInteger () else ki := a . IndexOf ( ki_s ) ;
//subtraktion under dekryptering eller addition.
om dekryptera så ki := ki * - 1 ;
c := a [(( a . Längd + mi + ki ) mod a . Längd ) + 1 ] ; //symbol enligt Vigenère-tabellen.
om shiftedAtbash då c := a [ a . längd - a . IndexOf ( c )] ; // Atbash karaktär eller karaktär.
Resultat := Resultat + c ; //Lägg till ett tecken till resultatet.
slut ;
slut ;
function GronsfeldToVigenere ( GfKey : sträng ) : sträng ;
const
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Alphabet string
var
i : Heltal ;
börja
Resultat := '' ;
för i := 1 till Length ( GfKey ) gör
Resultat := Resultat + a [ StrToInt ( GfKey [ i ]) + 1 ] ;
slut ;
function VigenereToGronsfeld ( VgKey : sträng ) : sträng ;
const
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Alphabet string
var
i : Heltal ;
börja
Resultat := '' ;
för i := 1 till Length ( VgKey ) gör
Result := Result + IntToStr ( a . indexOf ( VgKey [ i ])) ; //2015
slut ;
procedur GronsfeldTest () ;
const
MSG = 'GRONSFELD' ;
KEY = '2015' ;
TXT = '1. Gronsfeld-chiffer (avskalad version av Vigenère-chiffer med digital nyckel):' #13#10 +
'Meddelande:' #9 '"%s"' #13#10 +
'Nyckel:' #9#9 '"%s"' # 13#10 +
'Kryptering:' #9 '"%s" (ska vara "IRPSUFFQF")' #13#10 +
'Dekryptering:' #9 '"%s" (ska vara "%s")' # 13 #10 +
'Match:' #9 '%s' #13#10 ;
var
krypterad , dekrypterad : sträng ;
start
//1. Gronsfeld chiffer. (En trunkerad version av Vigenère-chifferet).
//Parametrar: m - meddelande/chiffertext, k - nyckel (endast siffror), läge - "kryptera/dekryptera"
krypterad := VigenereCrypt ( MSG , KEY , cmGronsfeld ) ; //ger IRPSUFFQF-Gronsfeld-chiffer
dekrypterad := VigenereCrypt ( krypterad , KEY , cmGronsfeld eller cmDecrypt ) ; //ger GRONSFELD - från Gronsfeld-chifferet
logga . AppendFormat ( TXT , [ MSG , KEY , crypted , decrypted , MSG , YesNo [ decrypted = MSG ]] ;
slut ;
procedure VigenereToGronsfeldTest () ;
const
GKEY = '2015' ;
TXT = #13# 10'2. Konvertera Gronsfeld-nyckel till Vigenère-nyckel:' #13#10 +
'Gronsfeld-nyckel: "%s" >>> Vigenère-nyckel: "%s" och tillbaka: "%s"' #13#10 ;
var
GronsfeldKey2 : string ;
VigenereKey : sträng _
börja
//2. I stället för siffror, i Gronsfeld-chifferet, är det också möjligt att ange bokstäver.
//Då kommer Gronsfeld-chifferet att vara ett vanligt Vigenère-chiffer, men med en teckenbegränsning per nyckel.
//Till exempel, med alla möjliga siffror i nyckeln "0123456789", kan nyckeln bara vara från bokstäverna "ABCDEFGHIJ"
//Du kan få det så här:
VigenereKey := GronsfeldToVigenere ( GKEY ) ; //CABF
//Och vice versa:
GronsfeldKey2 := VigenereToGronsfeld ( VigenereKey ) ; //2015
logga . AppendFormat ( TXT , [ GKEY , VigenereKey , GronsfeldKey2 ]) ;
slut ;
procedure GronsfeldAsVigenereTest () ;
const
MSG = 'GRONSFELD' ;
KEY = 'CABF' ;
TXT = #13# 10'3. Gronsfeld-chiffer - med Vigenère-nyckel, enligt Vigenère-tabellen:' #13#10 +
'Meddelande:' #9 '"%s"' #13#10 +
'Nyckel:' #9#9 '"%s"' # 13 #10 +
'Kryptering:' #9 '"%s" (ska vara "IRPSUFFQF")' #13#10 +
'Dekryptering:' #9 '"%s" (ska vara "%s")' #13 # 10 +
'Match:' #9 '%s' #13#10 ;
var
krypterad , dekrypterad : sträng ;
börja
//3. Då är krypterings-dekrypteringen av Gronsfeld-chifferet ett arbete med Vigenère-chifferet:
krypterad := VigenereCrypt ( MSG , KEY ) ; //ger IRPSUFFQF - Beaufort chiffer
dekrypterad := VigenereCrypt ( krypterad , KEY , cmDecrypt ) ; //ger GRONSFELD - från Beaufort-chifferet.
logga . AppendFormat ( TXT , [ MSG , KEY , crypted , decrypted , MSG , YesNo [ decrypted = MSG ]] ;
slut ;
procedure VigenereFullTest () ;
const
MSG = 'ATTACKATDAWN' ; //Message
KEY = 'CITRON' ; //Key
TXT = #13#10 '4. Vigenère-chiffer (full version):' #13#10 +
'Meddelande:' #9 '"%s"' #13#10 +
'Nyckel:' #9#9 '"%s"' #13#10 +
' Kryptering:' #9 '"%s" (ska vara "LXFOPVEFRNHR")' #13#10 +
'Dekryptering:' #9 '"%s" (bör vara "%s")' #13#10 +
'Match :' #9 '%s' #13#10 ;
var
krypterad , dekrypterad : sträng ;
börja
//4. Vigenère-chiffer (full version):
//Parametrar: m - meddelande/chiffertext, k - nyckel, läge - "kryptera"/"dekryptera"
krypterad := VigenereCrypt ( MSG , KEY ) ; //ger LXFOPVEFRNHR - Vigenere chiffer
dekrypterad := VigenereCrypt ( krypterad , KEY , cmDecrypt ) ; //ger ATTACKATDAWN - från Vigenère-chifferet
logga . AppendFormat ( TXT , [ MSG , KEY , crypted , decrypted , MSG , YesNo [ decrypted = MSG ]] ;
slut ;
förfarande BeaufortTest () ;
const
MSG = 'ATTACKATDAWN' ; //Message
KEY = 'CITRON' ; //Key
TXT = #13#10 '5. Beaufort-chiffer (i tabellen - rad för rad):' #13#10 +
'Meddelande:' #9 '"%s"' #13#10 +
'Nyckel:' #9#9 '"%s"' #13 #10 +
'Beauforts Vigenère-chiffer:' #13#10 +
'Kryptering:' #9 '"%s" (bör vara "LLTOLBETLNPR")' #13#10 +
'Dekryptering:' #9 '"%s " (bör vara "%s")' #13#10 +
'Match:' #9 '%s' #13#10 ;
var
krypterad , dekrypterad : sträng ;
börja
//5. Beaufort-chifferet - genom Vigenère-chifferet (det finns en annan tabell och chiffertext - skiftade atbash längs linjerna).
//Parametrar: m - nyckel, k - meddelande/chiffertext, mode - 'dekryptera' (endast dekryptering)
//Det speciella med Beaufort-chifferet är att dekryptering är omkryptering av chiffertexten - med samma nyckel.
//Det vill säga samma operation.
crypted := VigenereCrypt ( KEY , MSG , cmDecrypt ) ; //ger LLTOLBETLNPR - Beaufort chiffer
dekrypterad := VigenereCrypt ( KEY , crypted , cmDecrypt ) ; //ger ATTACKATDAWN - från Beaufort-chifferet.
logga . AppendFormat ( TXT , [ MSG , KEY , crypted , decrypted , MSG , YesNo [ decrypted = MSG ]] ;
slut ;
procedure ShiftedAtbashTest () ;
const
MSG = 'ATTACKATDAWN' ; //Message
KEY = 'CITRON' ; //Key
TXT = #13#10 '6. Skiftad atbash (i atbash-tabellen, flyttade både rader och kolumner):' #13#10 +
'Meddelande:' #9 '"%s"' #13#10 +
'Nyckel:' #9#9 '"% s "' #13#10 +
'Skiftat atbash - Vigenère-tabellkryptering:' #9 '"%s" (ska vara "OCULKEVUIMSI")' #13#10 +
'Ersättningskommutativitetstest:' #9 '"%s" ( ska vara "OCULKEVUIMSI")' #13#10 +
'Skiftat atbash - Vigenère-dekryptering:' #9 '"%s" (ska vara "ATTACKATDAWN")' #13#10 +
'Ersättningskommutativitetstest:' #9 '" %s"' #13#10 +
'Jämförelse med meddelande:' #9 '%s' #13#10 +
'Kommutativitet för ersättning:' #9 '%s' ;
var
csaMK , csaKM , csaKMK , csaKKM : string ;
börja
//6. Skiftad atbash - genom Vigenère-chifferet (det finns en annan tabell och chiffertext - atbash, skiftad i rader i kolumner).
//Parametrar: m eller k - meddelande/chiffertext och nyckel (eller vice versa), mode - cmShiftedAtbash (endast kryptera + atbash till resultatet)
//Inte bara är samma operation (dekryptering - det finns kryptering av chiffertexten), men till Dessutom är det också kommutativt.
//Det vill säga, här kan de n:te bokstäverna (i meddelandet/chiffertexten) och nyckeln - bytas, vilket ger samma resultat.
//Det är just detta, den förskjutna atbashen - som närmar sig Vernam-chifferet,
//eftersom när man dekrypterar med Vernam-chifferet spelar XOR-operationen ingen roll var nyckelbyten är och var chiffertextbyten finns.
csaMK := VigenereCrypt ( MSG , KEY , cmShiftedAtbash ) ; //ger OCULKEVUIMSI - skiftat atbash-chiffer.
csaKM := VigenereCrypt ( KEY , MSG , cmShiftedAtbash ) ; //Detsamma, det spelar ingen roll var nyckeln är, utan var meddelandet är.
csaKMK := VigenereCrypt ( csaKM , KEY , cmShiftedAtbash ) ; //ger ATTACKATDAWN - från det förskjutna atbash-chifferet.
csaKKM := VigenereCrypt ( KEY , csaKM , cmShiftedAtbash ) ; //Detsamma, det spelar ingen roll var nyckeln är, utan var chiffertexten är.
logga . AppendFormat ( TXT , [ MSG , KEY , csaMK , csaKM , csaKMK , csaKKM ,
YesNo [ csaKKM = MSG ] , YesNo [( csaMK = csaKM ) och ( csaKMK = csaKKM )]]) ;
slut ;
start
log := TStringBuilder . skapa () ;
prova
//Tester:
GronsfeldTest () ;
VigenereToGronsfeldTest () ;
GronsfeldAsVigenereTest () ;
VigenereFullTest () ;
BeaufortTest () ;
ShiftedAtbashTest () ;
MessageBoxW ( GetDesktopWindow () , PWideChar ( log . ToString () ) , 'Vigenère' , 0 ) ;
äntligen
logga . gratis () ;
slut ;
slut .
Ruby
Koden
klass Kryptoklass
CryptoError < StandardError ; _ själv ; end attr_reader :alfabet
# accepterar en godtycklig uppsättning unika tecken, kan vara ett eller flera språk, standard latinska gemener
def initialisera ( alfabet = ( 'A' .. 'Z' ) . to_a )
@alphabet = alfabet
check_alphabet
end
# c{j}=(m{j}+k{j}) mod {n}
def encode ( key_str , text_srt )
key_arr = str_to_alphabet_index_arr ( key_str )
char_number_at_text = 0
str_to_alphabet_index_arr ( text_srt ) . injicera ( "" ) gör | r , bokstavsindex |
encode_letter_index = ( letter_index + key_arr [ char_number_at_text % key_arr . size ] ) % alfabet . storlek
char_number_at_text += 1
r + alfabet [ encode_letter_index ]
slut
slut
# m{j}=(c{j} + n - k{j}) mod {n}
def decode ( key_str , text_srt )
key_arr = str_to_alphabet_index_arr ( key_str )
char_number_at_text = 0
str_to_alphabet_index_arr ( text_srt ) . injicera ( "" ) gör | r , bokstavsindex |
decode_letter_index = ( bokstavsindex + alfabetet . storlek - nyckel_arr [ char_number_at_text % key_arr . storlek ] ) % alfabetet . storlek
char_number_at_text += 1
r + alfabet [ decode_letter_index ]
slut
slut
privat
def str_to_alphabet_index_arr ( str )
str . tecken . karta gör | röding |
index = alfabet . index ( char )
om index
index
annars
höjer CryptoError , "bokstäver ska vara i alfabetet"
slutet
slutet
slutet
def check_alphabet
höjer CryptoError , 'alphabet should be array' om inte alfabetet . är en? ( Array )
höj CryptoError , 'bokstäver ska vara strängar' om alfabetet . några? { | bokstäver | ! brev . är en? ( String ) }
höj CryptoError , 'alfabet bör innehålla minst en bokstav' om alfabetet . storlek < 1
höj CryptoError , 'bokstäver ska vara unika' om alfabetet . unik . storlek != alfabet . size
raise CryptoError , 'bokstaven ska inte vara tom' om alfabetet . några? ( & :empty? )
höj CryptoError , 'bokstäver ska bara innehålla ett tecken' om alfabetet . några? { | bokstäver | brev . storlek ! = 1 }
slutände
# exempel
krypto = Krypto . ny
krypto . koda ( 'LEMON' , 'ATTACKATDAWN' ) # "LXFOPVEFRNHR"
krypto . avkoda ( 'LEMON' , 'LXFOPVEFRNHR' ) # "ATTACKATDAWN"
krypto . koda ( 'LEMON' , 'attack' ) # Crypto::CryptoError: bokstäverna ska vara i alfabetet
eng_crypto = Krypto . new (( 'A' .. 'I' ) . to_a )
rus_crypto . koda ( 'KVAS' , 'MAMAMYLARAMU' ) # "TSVMSTSELSЪVMD"
rus_crypto . avkoda ( 'KVAS' , ' TSVMTSELSЪVMD' ) # "MAMAMYLARAMU"
Anteckningar
- ↑ Martin , Keith M. Everyday Cryptography . — Oxford University Press, 2012. — sid. 142 sid. — ISBN 978-0-19-162588-6 .
- ↑ Diskret matematik: Algoritmer. Historisk översikt (otillgänglig länk) . rain.ifmo.ru Hämtad 22 december 2017. Arkiverad från originalet 21 december 2017. (obestämd)
- ↑ Sergey och Marina Bondarenko . Chiffer från det förflutna: kryptografi och mysterier från före-datoreran (ryska) , 3DNews - Daily Digital Digest (8 juli 2015). Hämtad 22 december 2017.
- ↑ 1 2 3 4 5 6 7 Babash A.V., Shankin G.P. Kryptografins historia. Del I. - M .: Helios ARV, 2002. - S. 240 s .. - ISBN 5854380439 .
- ↑ Smith, Laurence D. Substitution Ciphers // Kryptografi vetenskapen om hemligt skrivande: Vetenskapen om hemligt skrivande . - Dover Publications , 1943. - P. 81. - ISBN 0-486-20247-X .
- ↑ 1 2 Nosov V. A. Kort historisk skiss över utvecklingen av kryptografi (ryska) // Moskvas universitet och utvecklingen av kryptografi i Ryssland. Material från konferensen vid Moscow State University .. - (17 oktober 2002).
- ↑ 1 2 3 David, Kahn. The Codebreakers: The Story of Secret Writing. - Simon & Schuster, 1999. - ISBN 0-684-83130-9 .
- ↑ Knudsen, Lars R. Block Ciphers—en undersökning. - London: Springer, 1997. - ISBN 3-540-65474-7 .
- ↑ Stanislaw Jarecki. Kryptoöversikt, perfekt sekretess, engångsblock // University of California. – 2004.
- ↑ Richard A. Mollin. Koder: Guiden till sekretess från antiken till modern tid. - Chapman och Hall/CRC, 2005. - 704 sidor sid. — ISBN 9781584884705 .
- ↑ Zhelnikov V. Kryptografi från papyrus till dator - M .: ABF , 1996. - 336 sid. — ISBN 978-5-87484-054-9
- ↑ Singh S. Kodboken: Vetenskapen om hemlighetsmakeri från det antika Egypten till kvantkryptering. - New York City: Doubleday, 1999. - 416 sid. Med. - ISBN 978-1-85702-879-9 .
- ↑ Labbövning: Vigenere, RSA, DES och Authentication Protocols // CS 415: Computer and Network Security. - 2006. Arkiverad den 23 juli 2011.
- ↑ Arto Salomaa. Public Key Kryptografi. — ISBN 3540528318 .
Litteratur
- Romankov V.A. Introduktion till kryptografi: föreläsningskurs, 2009. - 238 s. — ISBN 5777909825 .
- Babash A.V., Shankin G.P. Kryptografins historia. Del I. - M .: Helios ARV, 2002. - 240 sid. — ISBN 5854380439 .
- Zhelnikov V. Kryptografi från papyrus till dator - M .: ABF , 1996. - 336 sid. — ISBN 978-5-87484-054-9
- Arto Salomaa. Public Key Kryptografi. — ISBN 3540528318 .
- N. Smart. Kryptografi .. - Moskva: Technosfera, 2005. - 528 s. - ISBN 5-94836-043-1 .
- Singh S. The Code Book , Histoire des codes secrets (engelska) : The Science of Secrecy from Ancient Egypt to Quantum Cryptography, De l'Égypte des pharaons à l'ordinateur quantique - NYC : Doubleday , Knopf Doubleday Publishing Group , 1999. — 416 sid.
- Richard A. Mollin. Koder: Guiden till sekretess från antiken till modern tid. - Chapman och Hall/CRC, 2005. - 704 sidor sid. — ISBN 9781584884705 .
- Martin, Keith M. Vardagskryptering. - Oxford University Press, 2012. - 142 sid. — ISBN 978-0-19-162588-6
- Knudsen, Lars R. Block Ciphers—en undersökning. - London: Springer, 1997. - ISBN 3-540-65474-7 .
- Henk Ca van Tilborg. Encyclopedia of Cryptography and Security. - Springer, 2005. - 115 sid. — ISBN 038723473X .
- Arto Salomaa. Public Key Kryptografi. — ISBN 3540528318 .
Länkar
Ordböcker och uppslagsverk |
|
---|