RSA-签名与验证

              #include <string.h>

              #include <openssl/objects.h>

              #include <openssl/rsa.h>

             

              int    main()

              {

              int                         ret;

              RSA                         *r;

              int                         i,bits=1024,signlen,datalen,alg,nid;

              unsigned long               e=RSA_3;

              BIGNUM                      *bne;

              unsigned char               data[100],signret[200];

      

              bne=BN_new();
              //t BN_add_word(BIGNUM *a, BN_ULONG w)给大数a加上w,如果成功,返回1。
              ret=BN_set_word(bne,e);

              r=RSA_new();
             //int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)
              ret=RSA_generate_key_ex(r,bits,bne,NULL);

              if(ret!=1)

              {

                     printf("RSA_generate_key_ex err!\n");

                     return -1;

              }

      

              for(i=0;i<100;i++)

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

              printf("please select digest alg: \n");

              printf("1.NID_md5\n");

              printf("2.NID_sha\n");

              printf("3.NID_sha1\n");

              printf("4.NID_md5_sha1\n");

              scanf_s("%d",&alg);

              if(alg==1)

              {

                     datalen=55;

                     nid=NID_md5;

              }

              else if(alg==2)

              {

                     datalen=55;

                     nid=NID_sha;

              }

              else if(alg==3)

              {

                     datalen=55;

                     nid=NID_sha1;

              }

              else if(alg==4)

              {

                     datalen=36;

                     nid=NID_md5_sha1;

              }
             //int RSA_sign(int type, const unsigned char *m, unsigned int m_length,
             //unsigned char *sigret, unsigned int *siglen, RSA *rsa);
              ret=RSA_sign(nid,data,datalen,signret,(unsigned int *)&signlen,r);

              if(ret!=1)

              {

                     printf("RSA_sign err!\n");

                     RSA_free(r);

                     return -1;

              }
            //int RSA_verify(int type, const unsigned char *m, unsigned int m_length,
             //const unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
              ret=RSA_verify(nid,data,datalen,signret,signlen,r);

              if(ret!=1)

              {

                     printf("RSA_verify err!\n");

                     RSA_free(r);

                     return -1;

              }

              RSA_free(r);

              printf("test ok!\n");

              return 0;

       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值