古典密码实践(维吉尼亚算法)

Vigenère算法思路

 给出一串明文先判断是否在26个英文字母,然后用明文加上去密钥的得出的数值就是向后移位的位数,用此可以得出密文。而与这种方法相反得出解密的明文。判断给出的字母是不是在26个大小英文字母内,需保证是在26个字母内,使得明文,密钥,密文均在26个字母内。

目的

1.掌握单表代替和多表代替的加密原理。

2.进一步巩固掌握各种古典密码算法的加解密。

3.分析古典密码算法的安全性。

4.编程能力的锤炼。

要求

1.熟练掌握古典密码机制与原理。

2.选择一种古典密码算法编写程序实现(文件或数据)加解密功能。

3.对算法安全性进行分析评估。

实验工具

Anolis-7(64)

实验步骤

 编制程序代码

 将代码复制进去(这里最好自己输入,加强记忆) 

#include<stdio.h>

//加密

int encrypt(char *text,char *result,char *k)

{

    int l,i,j=0,z=0;

    for(l=0;text[l]!='\0';l++);

    for(i=0;i<l;i++)

    {

        result[z]=(text[i]-'a'+k[j]-'a')%26+'a';

        j++;

        z++;

    }

    return 0;

}

//解密

int decrypt(char *text,char *result,char *k)

{

    int l,i,j=0,z=0;

    for(l=0;text[l]!='\0';l++);

    for(i=0;i<l;i++)

    {

        result[z]=(text[i]-k[j]+26)%26+'a';

        j++;

        z++;

    }

    return 0;

}

int main()

{

    char text[50]="";

    char result[50]="";

    char k[50]="";

    int type;

    /**欢迎**/

    printf("--------欢迎使用Vigenere密码-----------\n");

    printf("请填写明文或者密文\n");

    scanf("%[^\n]",text);

    printf("请选择加密方式,输入1加密,输入2解密\n");

    scanf("%d",&type);

    printf("请输入密钥k\n");

    scanf("%s",k);

    if(type == 1){

        /**加密**/

        encrypt(text,result,k);

        printf("明文%s的密文为:%s\n",text,result);

    }else if(type == 2){

        /**解密**/

        decrypt(text,result,k);

        printf("密文%s的明文为:%s\n",text,result);

    }

    return 0;

}

 调试验证功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值