帮我写将输入的三个字母加密成密文,生成密文的规律是选取一个整数k(0<=k<=25,这个不需要程序判断,只是输入时不超过这个范围就可以了),使得原文的每个字母向右移k位得到密文。假定k=2,那么’a’向右移动2位就是’c’;’b’移动2位就是’d’;’y’移动2位又回到了’a’;’z’移动2位成为了’b’.你的任务是编程,其功能是根据一个整数k,将输入的3个字母加密,输出加密后的结果。 提示:需要使用条件表达式。另外相邻字母之间的值差1。例如'z'-'y'=1.
时间: 2023-03-26 14:03:43 浏览: 63
我可以回答这个问题。以下是代码:
#include <stdio.h>
int main() {
char a, b, c;
int k;
scanf("%c%c%c%d", &a, &b, &c, &k);
a = (a - 'a' + k) % 26 + 'a';
b = (b - 'a' + k) % 26 + 'a';
c = (c - 'a' + k) % 26 + 'a';
printf("%c%c%c", a, b, c);
return ;
}
输入三个字母和一个整数k,程序会将这三个字母加密并输出。
相关问题
帮我写C++语言将输入的三个字母加密成密文,生成密文的规律是选取一个整数k(0<=k<=25,这个不需要程序判断,只是输入时不超过这个范围就可以了),使得原文的每个字母向右移k位得到密文。假定k=2,那么’a’向右移动2位就是’c’;’b’移动2位就是’d’;’y’移动2位又回到了’a’;’z’移动2位成为了’b’.你的任务是编程,其功能是根据一个整数k,将输入的3个字母加密,输出加密后的结果。 提示:需要使用条件表达式。另外相邻字母之间的值差1。例如'z'-'y'=1.
好的,我可以回答这个问题。以下是C语言代码:
#include <stdio.h>
int main() {
char a, b, c;
int k;
printf("请输入三个字母:");
scanf("%c%c%c", &a, &b, &c);
printf("请输入加密的位移k:");
scanf("%d", &k);
a = (a - 'a' + k) % 26 + 'a';
b = (b - 'a' + k) % 26 + 'a';
c = (c - 'a' + k) % 26 + 'a';
printf("加密后的结果为:%c%c%c\n", a, b, c);
return ;
}
注意,这个程序只能加密小写字母。如果输入的是大写字母或其他字符,程序可能会出错。
三、有圆曲线密码按照如下算法进行加密:首先选取一条椭圆曲线, 并得E(ab),将明文消息m嵌入到曲线上得点P,再对点P做加密变换。取E(a,b)的一个生成元G,作为公开参数。用户A选整数nn 作为秘密钥,并以PA=nG作为公开钥。任一用户B若想向A发 送消息Pm,可选取一随机正整数k,产生点对C1=kG,C2=Pm+kPA 密文为Cm={C1,C2},B将Cm发送给A A用自己的秘密钥解密C2-nC1可得明文Pm 若椭圆曲线为E11(1,6),生成元G=(2,7),用户A的私钥=7, 请求出(1)A的公钥(2)明文Pm=(10,9),k=3求出对应的密文 Cm? (3)显示接收方A从密文恢复出明文消息的过程。(40分)
好的,让我来回答你的问题。
1. 用户A的公钥是多少?
根据题目中给出的信息,用户A的私钥为7,生成元为G=(2,7),椭圆曲线为E11(1,6)。因此,用户A的公钥为PA=nG=7G。在椭圆曲线上进行点的加法,可以使用倍点算法,即将点G加上自身,然后再加上自身,循环进行,直到加上私钥值为止。具体计算过程如下:
2G=(2,7)+(2,7)=(3,-1)
3G=(2,7)+(3,-1)=(1,-6)
4G=(2,7)+(1,-6)=(10,-29)
5G=(2,7)+(10,-29)=(4,-5)
6G=(2,7)+(4,-5)=(44,-237)
7G=(2,7)+(44,-237)=(10,9)
因此,用户A的公钥为PA=7G=(10,9)。
2. 密文Cm是多少?
根据题目中给出的信息,明文消息为Pm=(10,9),随机正整数k为3,用户B需要产生点对C1=kG=3G=(44,-237),C2=Pm+kPA=(10,9)+3(10,9)=(40,-63)。因此,密文Cm={C1,C2}={(44,-237),(40,-63)}。
3. 显示接收方A从密文恢复出明文消息的过程。
接收方A收到密文Cm后,需要使用自己的私钥n=7来解密C2-nC1,从而恢复出明文消息Pm。具体计算过程如下:
C2-nC1=(40,-63)-7(44,-237)=(40,-63)-(308,-1659)=(-268,1596)
由于椭圆曲线为E11(1,6),因此其方程为y^2=x^3+x+6,将x坐标-268代入该方程,可得y^2=(-268)^3-268+6=1596^2,因此y=1596或y=-1596。由于题目中要求点Pm在曲线上,因此取y=1596,即明文消息为Pm=(-268,1596)。
阅读全文