信息安全实践二之密码与隐藏技术2【数字水印&RSA加密算法实现】
叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

一、RSA演示实验
通过《RSA》演示软件,了解 RSA 的加密、解密过程和性能,掌握其工作原理。
二、数字水印演示实验
解压缩文件“数字水印(密码与编码软件包与JRE环境).rar”,运行其中的“Cryptography.exe”(需要jre环境支持,如果无法运行exe,请先安装jre环境)。
相关压缩文件在我的资源中查找。
运行其中的“数字水印”程序,打开一张图片,进行水印信息嵌入操作和提取操作。截取嵌入水印信息成功后的截图和提取水印信息成功后的截图。
三、RSA加密算法的实现
完成RSA演示实验之后,对RSA算法应该有了一些了解,下面要进行简单的编码:
注意:
上述代码中的平方乘运算 power(p,e)%n 代码有些问题(自己可以想想是什么问题?),所以运行结果会不正确。
请使用后面给出的平方乘函数代码,对程序稍作修改,可以得出正确结果。
说明:除了用C语言改正上述程序外,也可以选择用Java、Python等语言改写上述程序。
//平方乘函数
//m的a次方模r
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;
}
修改后程序实践运行:
课本实例运行结果如图:
相关源代码在我的资源中查找。
三、请用教材41页介绍的平方-乘算法计算下列各式的值,并编程实现平方-乘算法来进行验证。编程语言不限,将算法实现为1个函数,接收输入,给出输出,请将完整的函数代码粘贴在下方,代码中注释输入输出参数的意义及代码编译环境。
(1) 34^60 mod 51的结果是:34
(2) 345^89 mod 101的结果是:34
(3) 请注明所用编程语言,并将函数代码粘贴在下方(字体五号):
所用编程语言:c++
教材实例代码验证如图:
源代码如下:
#include<iostream>
using namespace std;
//递归快速幂
unsigned recur_pow_mod(unsigned a, unsigned b, unsigned mod)
{
unsigned long long result = 1;
unsigned array[64] = { 0 }; //用来存储b的二进制形式的每一位数
unsigned length = 0;
while (b)
{
array[length++] = b & 1;
b >>= 1;
}
for (int j = length - 1; j >= 0; j--)
{
if (array[j] == 1)
result = (result * result*a) % mod;
else
result = (result * result) % mod;
}
return result;
}
int main()
{
unsigned a, b, mod;
unsigned result = 0;
cout << "请输入数字(a,b,mod): " << endl;
cin >> a >> b >> mod;
result = recur_pow_mod(a, b, mod);
cout << "平方-乘结果为: " << result << endl;
return 0;
}
Ending!
更多课程知识学习记录随后再来吧!
就酱,嘎啦!
注:
1、人生在勤,不索何获。
2、信息安全实践一之密码与隐藏技术2【数字水印&RSA加密算法实现】相关文件在我的资源中查找。