作用域计算及仿射密码

本次实验详细介绍了作用域计算的加法与乘法原理,并探讨了仿射密码的算法,包括加密和解密过程。实验目标在于理解并实现这些算法,使用C++编写代码,处理特殊情况如数值正负和字符大小写。通过实验,不仅验证了仿射密码的正确性,还加深了对加密解密逻辑关系的理解。
摘要由CSDN通过智能技术生成

二、 实验项目名称:
作用域计算及仿射密码

四、 实验原理:

  1. 作用域加法与乘法:
    设定作用域p,将所要计算的两个数进行加法或乘法得到Z1,再对Z1进行对p求余计算(Z2 = Z1 % p),得到结果Z2。
    如果Z1得到是为负数,需先经过计算(Z1 = Z1 % p, Z1 += p),保证Z1在作用域内。

  2. 仿射密码:
    a) 算法原理
    仿射密码加密算法:C=Ek(m)=(k1m+k2)modn

仿射密码解密算法:M=Dk©=k3(c- k2) modn(其中k3×k1mod 26=1)。

i. 仿射密码具有可逆性的条件是gcd(k, n)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。
ii. 仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26 = 312。

b) 算法参数
仿射密码算法主要有c、m、k1、k2四个参数。c为密文,m是明文,k1、k2为密钥。

c) 算法流程
算法流程如下。

五、 实验目的:

  1. 学习作用域加法与乘法的原理。
  2. 学习作用域加法与乘法的实现。
  3. 学习仿射密码算法的原理。
  4. 学习仿射密码算法的算法实现。

六、 实验内容:

  1. 用C++作用域加法及乘法。
  2. 用C++实现仿射变换的加/解密算法。

七、 实验器材(设备、虚拟机名称):
Spc_mmx_w7

八、 实验步骤:
先了解两个计算的原理,再使用C++进行编程,包括对一些特殊情况的处理(包括数值的正负,输入字符的大小写等。)

九、 实验结果及分析:

  1. MOD P 加法与乘法
#include<iostream>

using namespace std;

unsigned long long addmodp(long long x,long long y,unsigned long long p){
   
    //若输入的为负数 则进行模 
    if(x<0) x = x%p + p;
    if(y<0) y = y%p + p;
    return (x+y)%p;
}

unsigned long long mulmodp(long long x,long long y,unsigned long long p){
   
    if(x<0) x = x%p + p;
    if(y<0) y = y%p + p;
    return (x*y)%p;
}

int main(){
   
    //输入作用域 P 
    unsigned long long p;
    cout<<"请输入作用域p :"; 
    cin>>p;
    //输入两个任意的数 X Y 
    cout<<"请输入两个任意的数 X Y:";
    long long x,y;
    cin>>x>>y;
    cout<<"X Y 进行模P加法的结果:"; 
    //对 X Y 进行模 P加法 
    cout<<addmodp(x,y,p)<<endl;
    cout<<"请输入两个任意的数 X Y:";
    cin>>x>>y;
    cout<<"X Y 进行模P乘法的结果:"; 
    //对 X Y 进行模 P乘法 
    cout<<mulmodp<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值