关于RSA非对称加密的问题。编程语言采用的是C++
现在需要设计一个用来加密解密程序。里面包含两个接口,一个是加密,一个是解密。
rsa 对称加密是公钥和私钥进行加密,接口设计如下:
int EncodeRSA(unsigned char pub_key,unsigned int pass_len, unsigned char data,unsigned int data_len,unsigned char** out_data,unsigned int out_len);
int DecodeRSA(unsigned char *pri_key,unsigned int pass_len, unsigned char data,unsigned int data_len,unsigned char** out_data,unsigned int *out_len);
采用公钥加密私钥解密的形式。 不知道这样设计合不合理, 里面的参数是否有问题。
另外,我找了网上的一段代码 ,代码可以运行: 里面的很多东西看不懂。
如下:
int test_rsa()
{
RSA *r;
int bits=1024,ret,len,flen,padding,i;
unsigned long e=RSA_3;
BIGNUM *bne;
unsigned char *key,*p;
BIO *b;
unsigned char from[500];
unsigned char to[500];
unsigned char out[500];
bne=BN_new();
printf("asdfds: %s\n",*bne);
r=RSA_new();
ret=RSA_generate_key_ex(r,bits,bne,NULL); //生成密钥
if(ret!=1)
{
printf("RSA_generate_key_ex err!\n");
return -1;
}
/* 私钥 i2d */
b=BIO_new(BIO_s_mem());
ret=i2d_RSAPrivateKey_bio(b,r); // private key encoding functions.
key=(unsigned char*)malloc(1024);
len=BIO_read(b,key,1024);
BIO_free(b);
b=BIO_new_file("rsa.key","w");
ret=i2d_RSAPrivateKey_bio(b,r); //public encoding functions.
BIO_free(b);
flen=RSA_size(r); //RSA_size, RSA_bits - get RSA modulus size
padding=5;
if(padding==RSA_PKCS1_PADDING )
flen-=11;
else if(padding==RSA_X931_PADDING)
flen-=2;
else if(padding==RSA_NO_PADDING)
flen=flen;
else
{
printf("rsa not surport !\n");
return -1;
}
//查看from内容,
for(i=0;i<flen;i++)
{
memset(&from[i],i,1);
printf("%c",from[i]);
}
printf("\n");
len=RSA_private_encrypt(flen,from,to,r,padding); // 私钥加密
std::cout<<"len: "<<len<<std::endl;
std::cout<<"padding: "<<padding<<std::endl;
if(len<=0)
{
printf("RSA_private_encrypt err!\n");
return -1;
}
len=RSA_public_decrypt(len,to,out,r,padding); //公钥解密
//查看out内容
for(i=0;i<flen;i++)
{
printf("%c",out[i]);
}
printf("\n");
if(len<=0)
{
printf("RSA_public_decrypt err!\n");
return -1;
}
if(memcmp(from,out,flen))
{
printf("err!\n");
return -1;
}
RSA_free(r);
CRYPTO_cleanup_all_ex_data();
return 0;
}
我想知道里面那个东西是私钥,那个东西是公钥。 是什么函数生成的。 还有i2d_RSAPrivateKey_bio()是做什么用的?