一.请将“二、数字水印演示实验”这个题目中截取嵌入水印信息成功后的截图和提取水印信息成功后的截图粘贴到下方:
二.请将“三、RSA加密算法的实现”这个题目的修改正确后的所有代码粘贴在下方(字体五号):
下面是c++实现
#include<iostream>
using namespace std;
int getd(int a,int b,int e){//制作私钥,私钥的值就为d;
int p,d=1;
p=(a-1)*(b-1);
while(d){
if(d*e%p==1){
return d;
}
else d++;
}
}
int pfcheng(int m,int a,int r){
int b[100],length=0;
int c=1;
do{
b[length++]=a%2;
a=a/2;
}
while(a!=0);
while(length>=0){
c=(c*c)%r;
if(b[length]==1){
c=(c*m)%r;
}
length--;
}
return c;
}
int jiami(int e,int n,int p){
int q;
q=pfcheng(p,e,n);
return q;
}
int jiemi(int d,int n,int p){
int q;
q=pfcheng(p,d,n);
return q;
}
void main(){
int prime1,prime2,p,d,e,n,miwen,minwen;
cout<<"请输入两个大的素数和公钥,e"<<endl;
cin>>prime1>>prime2>>e;
n=prime1*prime2;//e和n为公钥
cout<<n<<endl;
d=getd(prime1,prime2,e);//制作私钥,私钥的值就为d;
cout<<"密钥的值为"<<d<<endl;
cout<<"请输入要加密的串"<<endl;
cin>>p;
while(p!=0){
miwen=jiami(e,n,p);
cout<<miwen<<endl;
minwen=jiemi(d,n,miwen);
cout<<minwen<<endl;
cin>>p;
}
}
python实现:
# //用来算出私钥d
def getd(p,q,e):
qn=(p-1)*(q-1)
d=1
while(d):
if(d*e%qn==1):
return d
else:
d+=1
def pfcheng(m,a,n):
b=[]
c=1
length=-1
while True:#只能while(无限循环)和 break 组合起来替换 do ~ while
b.append(a%2)
length+=1
a=a//2#这里注意是//向下取整
if(a==0):
break
# print(b)
while(length>=0):
c=(c*c)%n
if(b[length]==1):
c=(c*m)%n
length-=1
return c
def jiami(p,e,n):
q=pfcheng(p,e,n)
return q
def jiemi(m,d,n):
q=pfcheng(m,d,n)
return q
def main():
print("请输入两个大的素数prime1,prime2和公钥e")
prime1,prime2,e=map(int,input().split())
# print(prime1,prime2,e)
n=prime1*prime2
print("n为",n)
d=getd(prime1,prime2,e)# //用来算出私钥d
print("私钥为", d)#其中e和n为公钥
print("请输入要加密的数字串")
p=int(input())
while(p!=0):
miwen=jiami(p,e,n)
print("加密后的数值是",miwen)
minwen=jiemi(miwen,d,n)
print("解密后的数值是",minwen)
p = int(input())
if __name__ == '__main__':
main()
三、请用教材41页介绍的平方-乘算法计算下列各式的值,并编程实现平方-乘算法来进行验证。编程语言不限,将算法实现为1个函数,接收输入,给出输出,请将完整的函数代码粘贴在下方,代码中注释输入输出参数的意义及代码编译环境。
(1) 34^60 mod 51的结果是:
34
(2) 345^89 mod 101的结果是:
34
(3) python实现:
def pfcheng(m,a,r):
b=[]
c=1
length=-1
while True:#只能while(无限循环)和 break 组合起来替换 do ~ while
b.append(a%2)
length+=1
a=a//2#这里注意是//向下取整
if(a==0):
break
# print(b)
while(length>=0):
c=(c*c)%r
if(b[length]==1):
c=(c*m)%r
length-=1
return c
while True:
print("请输入底数,指数,求余的数")
m,a,r=map(int,input().split())#m为底数,a为指数,r为对r求余,c为余数
c=pfcheng(m,a,r)
print(m,"^",a,"mod",r,"的余数为",c)