logo

Vigenere šifras

Įvadas

Vigenere šifras yra algoritmas, naudojamas tekstui užšifruoti ir iššifruoti. Vigenere šifras yra abėcėlinio teksto šifravimo algoritmas, naudojant susipynusių cezario šifrų seriją. Jis pagrįstas raktinio žodžio raidėmis. Tai daugiabėcėlinio pakeitimo šifro pavyzdys. Šį algoritmą lengva suprasti ir įgyvendinti. Šį algoritmą pirmą kartą aprašė 1553 m Giovan Battista Bellaso . Tekstui šifruoti ir iššifruoti naudojama Vigenere lentelė arba Vigenere kvadratas. Vigenere lentelė taip pat vadinama tabula recta.

Vigenere šifrą atlieka du metodai.

1 būdas

Kai pateikiama vigenere lentelė, šifravimas ir iššifravimas atliekami naudojant vigenere lentelę (26 * 26 matrica) šiuo metodu.

Vigenere šifras

Pavyzdys: paprastas tekstas yra „JAVATPOINT“, o raktas yra „GERIAUSIAS“.

Norint sugeneruoti naują raktą, duotas raktas kartojamas apskritimu, kol paprasto teksto ilgis nėra lygus naujajam raktui.

Vigenere šifras

Šifravimas

numpy standartinis nuokrypis

Pirmoji paprastojo teksto raidė derinama su pirmąja rakto raide. Paprasto teksto stulpelis „J“ ir klavišo „B“ eilutė kerta „K“ abėcėlę vigenere lentelėje, todėl pirmoji šifruoto teksto raidė yra „K“.

Panašiai antroji paprastojo teksto raidė derinama su antrąja klavišo raide. Paprasto teksto stulpelis „A“ ir klavišo „E“ eilutė kerta „E“ abėcėlę vigenere lentelėje, todėl antroji šifruoto teksto raidė yra „E“.

Šis procesas tęsiasi nepertraukiamai, kol bus baigtas paprastasis tekstas.

Šifruotas tekstas = KENTUTGBOX

Iššifravimas

Iššifravimas atliekamas pagal vigenere lentelės raktų eilutę. Pirmiausia pasirinkite rakto raidės eilutę, suraskite šifruoto teksto raidės vietą toje eilutėje, tada pasirinkite atitinkamo šifruoto teksto stulpelio etiketę kaip paprastąjį tekstą.

Vigenere šifras

Pavyzdžiui, rakto eilutėje yra „B“, o šifruotas tekstas yra „K“, o ši šifruoto teksto raidė rodoma stulpelyje „J“, tai reiškia, kad pirmoji paprastojo teksto raidė yra „J“.

np.sum

Toliau rakto eilutėje yra „E“, šifruotas tekstas yra „E“, o ši šifruoto teksto raidė rodoma stulpelyje „A“, tai reiškia, kad antroji paprastojo teksto raidė yra „A“.

Šis procesas tęsiasi nuolat, kol šifruotas tekstas bus baigtas.

Paprastas tekstas = JAVATPOINT

2 metodas

Kai vigenere lentelė nepateikta, šifravimas ir iššifravimas šiuo metodu atliekami Vigenar algebrine formule (raides (A-Z) paverčiant skaičiais (0-25)).

Šifravimo formulė yra

IRi= (Pi+ Ki) prieš 26

Iššifravimo formulė yra

Di= (Ei– Ki) prieš 26

Jei kokiu atveju (Di) reikšmė tampa neigiama (-ve), tokiu atveju prie neigiamos reikšmės pridėsime 26.

kur,

E žymi šifravimą.

python spausdinimas 2 skaitmenų po kablelio tikslumu

D reiškia iššifravimą.

P žymi paprastą tekstą.

K žymi raktą.

Pastaba: „i“ reiškia i-ojo raidžių skaičiaus poslinkį, kaip parodyta toliau esančioje lentelėje.

Vigenere šifras

Pavyzdys: paprastas tekstas yra „JAVATPOINT“, o raktas yra „GERIAUSIAS“.

kaip parsisiųsti muziką

Šifravimas: IRi= (Pi+ Ki) prieš 26

Paprastas tekstas J A IN A T P O N T
Paprasto teksto reikšmė (P) 09 00 dvidešimt vienas 00 19 penkiolika 14 08 13 19
Raktas B IR S T B IR S T B IR
Rakto reikšmė (K) 01 04 18 19 01 04 18 19 01 04
Šifruoto teksto reikšmė (E) 10 04 13 19 dvidešimt 19 06 01 14 23
Šifruotas tekstas K IR N T IN T G B O X

Iššifravimas: Di= (Ei– Ki) prieš 26

Jei bet kurio atvejo (Di) reikšmė tampa neigiama (-ve), tokiu atveju prie neigiamos reikšmės pridėsime 26. Kaip ir trečioji šifruoto teksto raidė;

N = 13 ir S = 18

Di= (Ei– Ki) prieš 26

Di= (13–18) prieš 26

Di= -5 prieš 26

Di= (-5 + 26) prieš 26

Di= 21

Šifruotas tekstas K IR N T IN T G B O X
Šifruoto teksto reikšmė (E) 10 04 13 19 dvidešimt 19 06 01 14 23
Raktas B IR S T B IR S T B IR
Rakto reikšmė (K) 01 04 18 19 01 04 18 19 01 04
Paprasto teksto reikšmė (P) 09 00 dvidešimt vienas 00 19 penkiolika 14 08 13 19
Paprastas tekstas J A IN A T P O N T

Programa:

C kalba

 #include #include using namespace std; int main() { Vigenere cipher(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; c <= 2 26 'z') c +="A" - 'a'; else if (c continue; out key[j] * 'a') % j="(j" 1) key.length(); } return out; string decrypt(string text) { for (int i="0," && <="z" ) 26) }; pre> <p> <strong>Output:</strong> </p> <pre> I AM INDIAN Encrypted: SDERFGTUJ Decrypted: IAMINDIAN </pre> <hr></=>