Шифр БофораШифр Бофорта — полиалфавитный подстановочный шифр, созданный сэром Фрэнсисом Бофортом. Шифр похож на шифр Виженера, со слегка измененным механизмом шифрования и использованием tabula recta (также известная как таблица Виженера). Применялся в роторной шифровальной машине M-209. ОписаниеКлючДлина ключа (K) должна быть равной длине исходного текста. Для этого циклически записывают ключевое слово до тех пор, пока его длина не будет соответствовать длине исходного текста. ШифрованиеДля того чтобы зашифровать открытый текст (M) с использованием ключа (K) нужно:
ДешифрированиеДля того чтобы дешифрировать шифротекст (C) с использованием ключа (K) нужно:
ПримерПусть дан исходный текст: C = "HELLOWORLD"
КлючДлина клера - 10 символов, значит и длина ключа также должна равнятся 10 символам.
Шифрование
. . . . . . . . .
Шифротекст (C) - "DANZQCWNNH" Дешифрирование
. . . . . . . . .
Дешифрованный текст (M) - "HELLOWORLD" РеализацияPythonКод m = "HELLOWORLD"
k = "KEY"
k = (k*(len(m))+k)[:len(m)] # подгоняем ключ
c = ''.join([chr(((ord(k[i]) - ord(m[i])) % 26)+ord("A")) for i in xrange(len(m))]) # шифруем
print c # выдаст DANZQCWNNH
e = ''.join([chr(((ord(k[i]) - ord(c[i])) % 26)+ord("A")) for i in xrange(len(c))]) # дешифруем
print e # выдаст HELLOWORLD
JavaScriptКод var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //задаём строку алфавита
var m = "HELLOWORLD";
var k = "KEY";
for(i=k.length, j=0; i<m.length; i++, j++){k += k[ ( ( i + j ) % k.length ) ]; } // # подгоняем ключ
function encrypt(m,k){
c = '';
for(i=0; i<m.length; i++){ // шифруем
c += a[ ( ( ( a.length + a.indexOf( k[i] ) - a.indexOf( m[i] ) ) % a.length ) ) ]; //посимвольно
}
return c;
}
//Можно скопировать и вставить этот код - в консоль браузера.
console.log('cypher = ', encrypt(m,k)); //# выдаст DANZQCWNNH
console.log('decrypted = ', encrypt(encrypt(m,k),k)); //# выдаст HELLOWORLD
|