维吉尼亚密码是一种古典密码,属于代换密码,而且是多表代换密码。
密文对应的字母数字=明文对应的字母数字+密钥对应的字母数字
例如:
明文abcde,密钥abcd,对应的密文就是bdfhf,第五个明文e对应的密钥值又是a了。
12345+1234=24685
话不多说,上代码。
//明文
String passcode = passcode;
//密钥
String vige = vige;
//密钥长度
int move = vige.length();
//密文
String string = "";
//加密过程
for(int i = 0; i < passcode.length(); i++)
{ char passwd = passcode.charAt(i);
char passVige = vige.charAt(i%move);
if(passwd >= 'A' && passwd <= 'Z')
{
if(passVige >= 'A' && passVige <= 'Z')
{
passwd = (char) (((passwd-'A')+(passVige-'A'+1))%26 + 'A');
}
else if(passVige >= 'a' && passVige <= 'z')
{
passwd = (char) (((passwd-'A')+(passVige-'a'+1))%26 + 'A');
}
}
else if(passwd >= 'a' && passwd <= 'z')
{
if(passVige >= 'A' && passVige <= 'Z')
{
passwd = (char) (((passwd-'a')+(passVige-'A'+1))%26 + 'a');
}
else if(passVige >= 'a' && passVige <= 'z')
{
passwd = (char) (((passwd-'a')+(passVige-'a'+1))%26 + 'a');
}
}
string += passwd;
}
//解密
for(int i = 0; i < passcode.length(); i++)
{
char passwd = passcode.charAt(i);
char passVige = vige.charAt(i%move);
if(passwd >= 'A' && passwd <= 'Z')
{
if(passVige >= 'A' && passVige <= 'Z')
{
passwd = (char) (((passwd-'A')-(passVige-'A'+1)+26)%26 + 'A');
}
else if(passVige >= 'a' && passVige <= 'z')
{
passwd = (char) (((passwd-'A')-(passVige-'a'+1)+26)%26 + 'A');
}
}
else if(passwd >= 'a' && passwd <= 'z')
{
if(passVige >= 'A' && passVige <= 'Z')
{
passwd = (char) (((passwd-'a')-(passVige-'A'+1)+26)%26 + 'a');
}
else if(passVige >= 'a' && passVige <= 'z')
{
passwd = (char) (((passwd-'a')-(passVige-'a'+1)+26)%26 + 'a');
}
}
string += passwd;
}