Z26上的仿射密码体制

本文介绍了一种基于Z26的仿射密码体制,详细阐述了加密和解密过程。加密公式为y=k1x+k2(mod26),解密公式为x=_k1(y-k2)(mod26),其中_k1是k1的乘法逆元。通过实例,实现了读取文本文件‘in.txt’进行加密,并将结果保存到‘encode.txt’,同时进行解密,结果保存到‘decode.txt’。
摘要由CSDN通过智能技术生成

加密过程
y=k1x+k2(mod26)

解密过程

x=_k1(y-k2)(mod26)

_k1为k1的乘法逆元,因为有26这个范围,而且逆元唯一,所以可直接脑残试出_k1的值

 

具体实现:

读文本文件"in.txt"进行加密,结果放到"encode.txt"中,同时进行解密,结果放在"decode.txt"中

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <math.h>
#include <time.h>
using namespace std;

int k1[12]={1,3,5,7,9,11,15,17,19,21,23,25},k2, _k1;
int index;
char temp;
char ans;

int gcd(int a,int b)
{
    int temp;
    if(a<b)
    {
        temp=a;
        a=b;
        b=temp;
    }

    int r=1;
    while(r)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}

void chengfaniyuan()
{
    int i;
    for(i=1; i<26; i++)
    {
        if((k1[index]*i)%26==1)
        {
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Z26中,一个整数a的乘法逆元指的是另一个整数b,满足 a*b ≡ 1 (mod 26)。也就是说,a和b的乘积除以26的余数是1。如果a在Z26中存在乘法逆元,那么我们称a是可逆的。 现在,我们需要找到11在Z26中的乘法逆元。可以通过暴力枚举法来找到它,也可以使用扩展欧几里得算法来计算。 方法1:暴力枚举法 我们可以从0到25逐个尝试,看哪个数和11的乘积除以26的余数是1。具体计算如下: 11 * 0 ≡ 0 (mod 26) 11 * 1 ≡ 11 (mod 26) 11 * 2 ≡ 22 (mod 26) 11 * 3 ≡ 7 (mod 26) 11 * 4 ≡ 18 (mod 26) 11 * 5 ≡ 3 (mod 26) 11 * 6 ≡ 14 (mod 26) 11 * 7 ≡ 25 (mod 26) 11 * 8 ≡ 10 (mod 26) 11 * 9 ≡ 21 (mod 26) 11 * 10 ≡ 6 (mod 26) 11 * 11 ≡ 17 (mod 26) 12 * 12 ≡ 2 (mod 26) 11 * 13 ≡ 13 (mod 26) 11 * 14 ≡ 24 (mod 26) 11 * 15 ≡ 9 (mod 26) 11 * 16 ≡ 20 (mod 26) 11 * 17 ≡ 5 (mod 26) 11 * 18 ≡ 16 (mod 26) 11 * 19 ≡ 1 (mod 26) 11 * 20 ≡ 12 (mod 26) 11 * 21 ≡ 23 (mod 26) 11 * 22 ≡ 8 (mod 26) 11 * 23 ≡ 19 (mod 26) 11 * 24 ≡ 4 (mod 26) 11 * 25 ≡ 15 (mod 26) 因此,我们可以看到11在Z26中的乘法逆元是19。 方法2:扩展欧几里得算法 扩展欧几里得算法可以用来求解两个整数的最大公约数以及它们的线性组合,进而计算出一个整数在模意义下的乘法逆元。具体步骤如下: 1. 首先,我们需要求解11和26的最大公约数。可以使用欧几里得算法来计算,具体步骤如下: 26 = 2 * 11 + 4 11 = 2 * 4 + 3 4 = 1 * 3 + 1 3 = 3 * 1 + 0 因此,11和26的最大公约数是1。 2. 然后,我们需要使用扩展欧几里得算法来计算11在模意义下的乘法逆元。具体步骤如下: 从最后一行开始,用上一行的系数计算当前行的系数,直到求解出x和y的值为止。因此,11在Z26中的乘法逆元是19。 综上所述,11在Z26中的乘法逆元可以通过暴力枚举法或者扩展欧几里得算法来求解,答案都是19。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值