密码学实验(五)——RSA编程实验
(一)使用函数说明:
1、 密钥生成函数:
int rsa_make_key(prng_state *prng,int wprng,int size,long e,rsa_key *key); 返回值:生成密钥状态(成功返回0,失败返回1); 参数:prng_state *prng —— prng状态; int wprng —— prng标志 int size —— 密钥长度 long e —— 公钥e的值; rsa_key *key —— RSA密钥
函数功能:根据选择生成一个1024b的RSA密钥
2、 加密函数:
int rsa_encrypt_key(const unsigned char *in,unsigned long inlen,unsigned char *out,unsigned long *outlen,const unsigned char *lparam,unsigned long
lparamlen,prng_state *prng,int prng_idx,int hash_idx,int padding,rsa_key *key); 返回值:加密状态(成功返回0,失败返回1); 参数:const unsigned char *in——输入的明文 unsigned long inlen——明文长度
unsigned char *out——加密后密文存放的地址 unsigned long *outlen——密文长度
const unsigned char *lparam——lparam参数 unsigned long lparamlen——lparam长度 prng_state *prng——prng状态 int prng_idx——prng标志 int hash_idx——hash标志 rsa_key *key——RSA密钥
函数功能:进行RSA加密过程;
3、 解密函数:
int rsa_decrypt_key(const unsigned char *in, unsigned long inlen,unsigned char
*out,unsigned long *outlen,const unsigned char *lparam,unsigned long lparamlen,int hash_idx,int *stat,rsa_key *key);
返回值:解密状态(成功返回0,失败返回1);
参数:const unsigned char *in——之前计算得到的密文; unsigned long inlen——密文长度
unsigned char *out——解密后明文存放的地址 unsigned long *outlen——明文长度
const unsigned char *lparam——lparam参数 unsigned long lparamlen——lparam长度
prng_state *prng——prng状态 int prng_idx——prng标志 int hash_idx——hash标志
int *stat——解密后数据是否正确 rsa_key *key——RSA密钥
函数功能:进行RSA解密过程;
(二)遇到的困难及解决办法:
1、在VC6.0平台上调试说明文档7.10给出的测试时,出现函数重载不能正常运行的情况(报错windows截图如下),进行了多种尝试仍未能解决。推测为使用到的库函数与系统内含库有冲突,故换做使用VS平台调试程序正常运行,得到正确结果。
2、程序的编写主要在于要根据说明文档对库内写好的函数进行调用,而库内参数值含义和函数的具体调用关系我都不是特别明确,所以写起来有一定难度,解决办法就是仔细阅读提供的说明文档并根据测试用例尝试编写并多做调试。
(三)程序运行结果:
程序运行截图如下:
加密RSAES-PKCS1-V1_5
加密RSAES_OAEP
有以上结果可以看出,即使是使用相同的密钥对,加密形成的密文仍不相同,但都能解密出原明文。