Beaufort密码

时间:2023-03-08 16:48:23
博福特密码,是一种类似于维吉尼亚密码的替代密码,由弗朗西斯·蒲福(Francis Beaufort)发明。它最知名的应用是M-209密码机。博福特密码属于对等加密,即加密演算法与解密演算法相同

博福特密码是按mod q减法运算的一种周期代替密码。即 ci+td=δi(mi+td)≡(ki-mi+td)(mod q)
所以,它和维吉尼亚密码类似,以ki为密钥的代替表是密文字母表为英文字母表逆序排列进行循环右移ki+1次形成的。例如,若ki=(相当于字母D),则明文和密文的对应关系如下:
 明文:a b c d e f g h i j k l m n o p q r s t u v w x y z
 密文:D C B A Z Y X W V U T S R Q P O N M L K J I H G F E
显然,博福特密码的解密变换为 mi+td≡δi(ci+td)≡(ki-ci+td)(modq)
因此,博福特密码的解密变换与加密变换相同。按博福特密码,以密钥ki加密相当于按下式的维吉尼亚加密:ci+td≡[(q-)-mi+td](modq)
若按下式加密:  ci+td≡(mi+td-ki)(modq)
就 得到变异的博福特密码,相应代替表示将明文字母表循环右移ki次而成。由于循环右移ki次等于循环左移(q-ki)次,即式ci+td≡(mi+td- ki)(modq)等价于以(q-ki)为密钥的维吉尼亚密码。所以维吉尼亚密码和变异的博福特密码互为逆变换,若一个是加密运算,则另一个就是解密运算。

博福特密码加密
#include
#include
#include

void Encry()
{
    ];
    char ch,temp;
    ,j=;
    if(getchar()=='\n')
        temp=' ';
    printf("请输入密钥: ");
    gets(key);
    L=strlen(key);

    printf("输入明文: ");

    while((ch=getchar())!='\n')
    {
        if(ch==' ')
        {
            i++;
            continue;
        }

        printf(-(ch+)+key[j%L]+)&+'A');
        j++;
        )
            printf(" ");
        i++;
    }
    putchar(ch);
}

int main()
{
    Encry();
    ;
}

博福特密码解密

#include
#include
#include

void Decry()
{
    ];
    char ch,temp;
    ,j=;
    if(getchar()=='\n')
        temp=' ';
    printf("请输入密钥: ");
    gets(key);
    L=strlen(key);

    printf("输入密文: ");

    while((ch=getchar())!='\n')
    {
        if(ch==' ')
        {
            i++;
            continue;
        }
        printf(-ch)&+);
        j++;
        )
            printf(" ");
        i++;
    }
    putchar(ch);
}

int main()
{
    Decry();
    ;
}