logo

Vigenere Şifresi

giriiş

Vigenere şifresi, metni şifrelemek ve şifresini çözmek için kullanılan bir algoritmadır. Vigenere şifresi, bir dizi iç içe geçmiş Sezar şifresi kullanan alfabetik bir metni şifrelemeye yönelik bir algoritmadır. Bir anahtar kelimenin harflerine dayanır. Bu, çok alfabetik ikame şifresinin bir örneğidir. Bu algoritmanın anlaşılması ve uygulanması kolaydır. Bu algoritma ilk olarak 1553 yılında Giovan Battista Bellaso . Metnin şifrelenmesi ve şifresinin çözülmesi için bir Vigenere tablosu veya Vigenere karesi kullanır. Vigenere tablosuna tabula recta da denir.

Vigenere şifresini iki yöntem gerçekleştirir.

Yöntem 1

Bu yöntemde vigenere tablosu verildiğinde şifreleme ve şifre çözme vigenere tablosu (26*26 matris) kullanılarak yapılır.

Vigenere Şifresi

Örnek: Düz metin 'JAVATPOINT'tir ve anahtar 'BEST'tir.

Yeni bir anahtar oluşturmak için, düz metnin uzunluğu yeni anahtara eşit olmadığı sürece verilen anahtar dairesel bir şekilde tekrarlanır.

Vigenere Şifresi

Şifreleme

yinelenen harita java

Düz metnin ilk harfi, anahtarın ilk harfiyle birleştirilir. Düz metnin 'J' sütunu ve 'B' anahtarının satırı, vigenere tablosundaki 'K' alfabesiyle kesişir, dolayısıyla şifreli metnin ilk harfi 'K' olur.

Benzer şekilde düz metnin ikinci harfi, anahtarın ikinci harfiyle birleştirilir. Düz metnin 'A' sütunu ve 'E' anahtarının satırı, vigenere tablosundaki 'E' alfabesiyle kesişir, dolayısıyla şifreli metnin ikinci harfi 'E'dir.

Bu işlem düz metin bitene kadar sürekli olarak devam eder.

Şifreli metin = KENTUTGBOX

Şifre çözme

Şifre çözme, vigenere tablosundaki anahtar sırası ile yapılır. Öncelikle anahtar harfin satırını seçin, şifreli metin harfinin bu satırdaki konumunu bulun ve ardından karşılık gelen şifreli metnin sütun etiketini düz metin olarak seçin.

chr işlevi pitonu
Vigenere Şifresi

Örneğin, anahtar satırında 'B', şifreli metin 'K' ve bu şifreli metin harfi 'J' sütununda yer alıyor, yani ilk düz metin harfi 'J'.

Daha sonra anahtarın satırında 'E' ve şifreli metin 'E' olup, bu şifreli metin harfi 'A' sütununda yer alır, yani ikinci düz metin harfi 'A'dır.

Bu işlem şifreli metin bitene kadar sürekli olarak devam eder.

Düz metin = JAVATPOINT

Yöntem 2

Bu yöntemde vigenere tablosu verilmediğinde şifreleme ve şifre çözme Vigenar cebirsel formülü ile yapılır (harfleri (A-Z) sayılara (0-25) dönüştürür).

Şifrelemenin formülü,

VEBen= (PBen+ KBen) 26'ya karşı

Şifre çözme formülü,

DBen= (EBen-KBen) 26'ya karşı

Her durumda (DBen) değeri negatif (-ve) olur, bu durumda negatif değere 26 ekleyeceğiz.

Nerede,

E şifrelemeyi ifade eder.

javascript çok satırlı dize

D şifre çözmeyi ifade eder.

P düz metni belirtir.

K anahtarı temsil eder.

Not: 'i', aşağıdaki tabloda gösterildiği gibi, harflerin i'inci sayısının uzaklığını belirtir.

Vigenere Şifresi

Örnek: Düz metin 'JAVATPOINT'tir ve anahtar 'BEST'tir.

Şifreleme: VEBen= (PBen+ KBen) 26'ya karşı

Düz metin J A İÇİNDE A T P Ö BEN N T
Düz metin değeri (P) 09 00 yirmi bir 00 19 on beş 14 08 13 19
Anahtar B VE S T B VE S T B VE
Anahtar değer (K) 01 04 18 19 01 04 18 19 01 04
Şifreli metin değeri (E) 10 04 13 19 yirmi 19 06 01 14 23
Şifreli metin k VE N T İÇİNDE T G B Ö X

Şifre çözme: DBen= (EBen-KBen) 26'ya karşı

Herhangi bir durumda (Di) değeri negatif (-ve) olursa bu durumda negatif değere 26 ekleyeceğiz. Şifreli metnin üçüncü harfi gibi;

N = 13 ve S = 18

DBen= (EBen-KBen) 26'ya karşı

DBen= (13 - 18) 26'ya karşı

DBen= -5'e karşı 26

bir dizeyi tam sayıya dönüştürün

DBen= (-5 + 26) 26'ya karşı

DBen= 21

Şifreli metin k VE N T İÇİNDE T G B Ö X
Şifreli metin değeri (E) 10 04 13 19 yirmi 19 06 01 14 23
Anahtar B VE S T B VE S T B VE
Anahtar değer (K) 01 04 18 19 01 04 18 19 01 04
Düz metin değeri (P) 09 00 yirmi bir 00 19 on beş 14 08 13 19
Düz metin J A İÇİNDE A T P Ö BEN N T

Program:

C dili

 #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></=>