经典密码之c++实现移位密码和代换密码

移位密码体制

通俗的来讲,移位密码体制就是通过一个线性变换,即一次方程,是使得在该变换下,明文和密文是一一对应的。下面给出具体的移位的密码体制。 令P=C=K=Z26​(这里的P表示明文空间,C代表密文空间,K代表密文空间)。对0<=K<=25,任意x,y属于Z26​(26是下标),定义:

  • ek​(x)=(x+K)mod26,这个是加密式子,具体是对每一位明文字符x进行右移K位得到密文。

  • dk​(x)=(y−K)mod26,这个是解密式子,具体是对每一位密文字符y进行左移K位得到明文。

另外当K=3的时候,此密码体制叫做凯撒密码。

#include<bits/stdc++.h>
using namespace std;
char S[100];

//在下面Begin和End之间补全代码,对输入的字符串进行K位移动加密
int main()
{
    int K;
    scanf("%d",&K);
    cin>>S;
    
	/*********** Begin ***********/
	for(int i=0;i<strlen(S);i++)
    printf("%c",'a'+((S[i]-'a'+K)%26));
    /*********** End ***********/
}

置换密码的密码体制

这里首先简单的讲解一下代换密码体制,大家一定都知道全排列,现在你得到26个英文字典字母的两个不同的排列,那么把这两个排列并到一起,上下对应的字母,就是明文和密文的对应了。 代换密码就是明文中每一个字符被替换成密文中的另外一个字符,代换后的各字母保持原来的位置。对密文进行逆替换就可以恢复出明文。

代码主要通过map函数的一对一的映射实现:

#include<bits/stdc++.h>
using namespace std;
char A[27],B[27],M[100];
map<char,char>MAP;

//在下面Begin和End之间补全代码,对输入的字符串进行代换表置换
int main()
{
    cin>>A;
    cin>>B;
    cin>>M;
 /*********** Begin ***********/
    for(int i=0;i<26;i++)
    MAP[A[i]]=B[i];
    for(int i=0;i<strlen(M);i++)
    cout<<MAP[M[i]];
 /*********** End ***********/
}

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值