Traditional encryption technologies cannot play a big role in today's network security, but they will be introduced at the beginning of every book about cryptography, because they are the basis of cryptography and the history of cryptography. Almost every cryptography book in the chapter about the Vigenere cipher will have a "Vigenere Substitution Table" user explaining the Vigenere cipher mechanism:
The encryption process is very simple, that is, given the key letter x and the plaintext letter y, the ciphertext letter is the letter located in the x row and y column. This determines that encrypting a message requires a key string as long as the message. Typically, the key string is a repetition of the key word.
Using the example in "Cryptography and Network Security - Principles and Practice" as an example in this article. For example, if the key word is deceptive and the message is "we are discovered save yourself", then the encryption process is as follows:
How did you get the first letter "Z" in the ciphertext? From the Vigenere substitution table, the letter with "d" in the key string as the row and "w" in the message as the column is "Z".
Using the lookup table method to encrypt a few times, you can easily summarize the rules: number A~Z from 0~25, then the encryption process is to find the message letters in the first row of the substitution table, such as "w", and then move backward d (that is, 3) times, the resulting letter is the ciphertext. If the count reaches the end, the next shift will continue from the beginning (i.e. A). In other words, A~Z can be regarded as a ring. The encryption process is to shift the pointer in a specific direction of the ring after determining the message letter. The number of times is the number represented by the key letter. This is actually a modulo 26 process.
To expand, the above encryption can only encrypt 26 letters and is not case-sensitive. But in fact, in addition to letters, English also has punctuation marks and spaces. If most English characters are taken into account, the Vigenere substitution table will be relatively large and a bit of a waste of space. If it is assumed that there are N characters that can be encrypted, and if these N characters are built into a ring, then the encryption process is a process modulo N, that is, C(i)=(K(i) P(i))modN, where K, C, and P represent the key space, ciphertext space, and message (plaintext) space respectively.
Some people on the Internet have implemented this encryption algorithm in C, and almost all of them use the lookup and substitution table method. Although the substitution table can be generated programmatically, the generated substitution table is too regular. I implemented the following using Javascript, using the module method. It feels more flexible and definitely takes up less space (the time efficiency has not yet been estimated)
var rlt = '';
var loop = 0; for(loop=0; loop
if(iP==-1) return 'This algorithm cannot currently encrypt the character: 'P.charAt(loop)';
var iK = Vigenere._strCpr.indexOf(K. charAt(loop));
if(iK==-1) return 'The key contains illegal characters:' K.charAt(loop);
var i = (iP iK) % Vigenere.lenCpr;
rlt = rlt Vigenere._strCpr.charAt(i);
}
return rlt;
};
Vigenere.DisEncrypt = function(K,C){
K = Vigenere._strKey(K,C);
var lenK = K.length;
var rlt = '';
for(loop=0; loop
if(iK==- 1) return 'The key contains illegal characters:' K.charAt(loop); var iC = Vigenere._strCpr.indexOf(C.charAt(loop));
if(iK > iC){
rlt = Vigenere._strCpr.charAt(iC Vigenere.lenCpr - iK);
}
else{
rlt = Vigenere._strCpr.charAt(iC - iK);
}
}
return rlt;
};