android rsa最大加密明文大小_RSA 加密 明文长度 超出

#include

#include

int main()

{

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],to[500],out[500];

bne=BN_new();

ret=BN_set_word(bne,e);

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);

key=malloc(1024);

len=BIO_read(b,key,1024);

BIO_free(b);

b=BIO_new_file("rsa.key","w");

ret=i2d_RSAPrivateKey_bio(b,r);

BIO_free(b);

116

/* 私钥d2i */

/* 公钥i2d */

/* 公钥d2i */

/* 私钥加密 */

flen=RSA_size(r);

printf("please select private enc padding : \n");

printf("1.RSA_PKCS1_PADDING\n");

printf("3.RSA_NO_PADDING\n");

printf("5.RSA_X931_PADDING\n");

scanf("%d",&padding);

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;

}

for(i=0;i

memset(&from[i],i,1);

len=RSA_private_encrypt(flen,from,to,r,padding);

if(len<=0)

{

printf("RSA_private_encrypt err!\n");

return -1;

}

len=RSA_public_decrypt(len,to,out,r,padding);

if(len<=0)

{

printf("RSA_public_decrypt err!\n");

return -1;

}

if(memcmp(from,out,flen))

{

printf("err!\n");

return -1;

}

/* */

printf("please select public enc padding : \n");

printf("1.RSA_PKCS1_PADDING\n");

117

printf("2.RSA_SSLV23_PADDING\n");

printf("3.RSA_NO_PADDING\n");

printf("4.RSA_PKCS1_OAEP_PADDING\n");

scanf("%d",&padding);

flen=RSA_size(r);

if(padding==RSA_PKCS1_PADDING)

flen-=11;

else if(padding==RSA_SSLV23_PADDING)

flen-=11;

else if(padding==RSA_X931_PADDING)

flen-=2;

else if(padding==RSA_NO_PADDING)

flen=flen;

else if(padding==RSA_PKCS1_OAEP_PADDING)

flen=flen-2 * SHA_DIGEST_LENGTH-2 ;

else

{

printf("rsa not surport !\n");

return -1;

}

for(i=0;i

memset(&from[i],i+1,1);

len=RSA_public_encrypt(flen,from,to,r,padding);

if(len<=0)

{

printf("RSA_public_encrypt err!\n");

return -1;

}

len=RSA_private_decrypt(len,to,out,r,padding);

if(len<=0)

{

printf("RSA_private_decrypt err!\n");

return -1;

}

if(memcmp(from,out,flen))

{

printf("err!\n");

return -1;

}

printf("test ok!\n");

RSA_free(r);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值