zoukankan      html  css  js  c++  java
  • 加密技术仿射密码

       今天上午一二节课上了信息安全概论,讲到加密技术,有点好奇,怎么实现加密和解密,移位密码挺简单,仿射密码用到仿射函数

     e(x)=ax+b(mod 26)  且a与26的最大公因子为1。密钥就是a,b。这个函数我开始理解错了,我以为ax加上b模除26后的结果,后来问了下老师再知道自己弄错了,是ax+b以后再模除26.然后想相应的解密函数,d(y)=a^(-1)(y-b)(mod 26),这里关键是a的逆怎么求,也就是a*a^(-1)(mod 26)=1 这个也可以换成 a*b+26*k=1;老师说道在计算机中很多地方有用到这个函数 s*a+b*t=1
    已知其中两个参数,求另外两个参数。要去实现一下,有多少种解法,以及对应的值是多少,还有两个数的最大公因子,虽然以前做过,现在想想总感觉有点不靠谱,所以现在好好补习一下。

    最大公约数的代码:

    View Code
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a,b,t,s=1;
     5     printf("请输入两个要求最大公约的数:\n");
     6     scanf("%d,%d",&a,&b);
     7     if(a>b){
     8         t=a;
     9         a=b;
    10         b=t;
    11     }
    12     while((a%b)!=0)
    13     {
    14         t=a;
    15         a=b;
    16         b=t%b;
    17     }
    18     printf("你输入两数的最大公约数是:%d\n",b);  
    19 }


    最小公倍数的代码:

    View Code
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a,b,t,s=1;
     5     printf("请输入两个要求最小公倍数的数:\n");
     6     scanf("%d,%d",&a,&b);
     7     if(a>b){
     8         t=a;
     9         a=b;
    10         b=t;
    11     }
    12     for(int i=2;i<=a;i++)
    13     {
    14         if((a%i==0)&&(b%i==0))
    15             s=s*i;
    16     }
    17     printf("你输入两数的最小公倍数是:%d\n",s);
    18 }

    求这个函数s*a+b*t=1的代码:

    怎样使,t为一个整数,然后再求出符合条件的另一个参数,不要陷入死胡同了,有时候当发现自己想得偏了,没办法解决的时候,应该立即调整过来,想想其他的办法。求a的逆的时候不一定要按这种求法

    还是按这个公式去求a*a^(-1)(mod 26)=1

    int i=0;

    while((a*(++i))%26!=1);

    return i;

    总结:

     这个加密的方法主要是掌握这些关键点,就可以写出相应的加密和解密的算法,求逆时,注意一下自己的思路,要开阔些。理解清楚了就不难。






  • 相关阅读:
    .NET分布式架构开发实战之一 故事起源
    .NET 分布式架构开发实战之三 数据访问深入一点的思考
    .NET 分布式架构开发实战之二 草稿设计
    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
    跨域SSO的实现之一:架构设计
    .NET下实现分布式缓存系统Memcached
    第一章 .NET的原理(2.0)
    Memcache协议中文版
    Excel数据导入Axapta中
    SQL Server2000的安装
  • 原文地址:https://www.cnblogs.com/wj204/p/3049088.html
Copyright © 2011-2022 走看看