永发信息网

请问有没有c或c加加的openssl的rsa分段加密例子demo?超过117个字节的明文

答案:1  悬赏:10  手机版
解决时间 2021-11-07 21:36
请问有没有c或c加加的openssl的rsa分段加密例子demo?超过117个字节的明文
最佳答案

#include
#include
#include
#include
#include

int main(int argc, char* argv[])
{
   printf("openssl_test begin
");
   RSA* rsa=NULL;
   char originstr[]="hello
";   //这是我们需要加密的原始数据
   //allocate RSA structure,首先需要申请一个RSA结构题用于存放生成的公私钥,这里rsa就是这个结构体的指针
   rsa = RSA_new();
   if(rsa==NULL)
    {
         printf("RSA_new failed
");          
         return -1;
    }

    //generate RSA keys
   BIGNUM* exponent;
    exponent = BN_new();        //生成RSA公私钥之前需要选择一个奇数(odd number)来用于生成公私钥
    if(exponent ==NULL)
    {
       printf("BN_new failed
"); 
       goto FAIL1;
    }
    if(0==BN_set_word(exponent,65537))    //这里选择奇数65537
    {
      printf("BN_set_word failed
"); 
      goto FAIL1;
    }
    
    
    //这里modulus的长度选择4096,小于1024的modulus长度都是不安全的,容易被破解
    if(0==RSA_generate_key_ex(rsa,4096,exponent,NULL))  
    {
       printf("RSA_generate_key_ex failed
"); 
       goto FAIL;      
    }
    char* cipherstr = NULL;
    //分配一段空间用于存储加密后的数据,这个空间的大小由RSA_size函数根据rsa算出
    cipherstr = malloc(RSA_size(rsa)); 
    if(cipherstr==NULL)
    {
       printf("malloc cipherstr buf failed
");
       goto FAIL1;
    }
   //下面是实际的加密过程,最后一个参数padding type,有以下几种。    
  
  //这里首先用公钥进行加密,选择了RSA_PKCS1_PADDING

  if(RSA_size(rsa)!=RSA_public_encrypt(strlen(originstr)+1,originstr,cipherstr,rsa,RSA_PKCS1_PADDING))
    {
       printf("encryption failure
");
        goto FAIL2;
    }
    printf("the original string is %s
",originstr);
    printf("the encrypted string is %s
",cipherstr);


    //Now, let"s decrypt the string with private key
    //下面来用私钥解密,首先需要一个buffer用于存储解密后的数据,这个buffer的长度要足够(小于RSA_size(rsa))
    //这里分配一个长度为250的字符数组,应该是够用的。
    char decrypted_str[250];
    int decrypted_len;
    if(-1=(decrypted_len=RSA_private_decrypt(256,cipherstr,decrypted_str,rsa,RSA_PKCS1_PADDING)))
    {
       printf("decryption failure
");
        goto FAIL2;
    }
    printf("decrypted string length is %d,decryped_str is %s
",decrypted_len,decrypted_str);
FAIL2:
      free(cipherstr);
FAIL1:
    BN_free(exponent);
FAIL:
   RSA_free(rsa);
   return 0;
}
以上是源代码,下面使用下面的编译命令在源码所在路径下生成可执行文件
    gcc *.c -o openssl_test -lcrypto -ldl -L/usr/local/ssl/lib -I/usr/local/ssl/include
其中,-lcrypto和-ldl是必须的,前者是OpenSSL中的加密算法库,后者是用于成功加载动态库。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
餐厅没生意怎么办?
靳这字怎么读
“死亡倒计时”用英语怎么说?
六五年属蛇的人2018年6月的运气如何
有偃师到卫辉汽车吗
大理中保鹤庆松桂镇警保联动服务站办公地址在
一本练习册是1.5元小亮买了m一共花了多少元如
Web Service和WCF的到底有什么区别
白羊这首歌的有什么意思
82比45多多少?比27多9的数是多少
钱币缺了一个角怎么办?就一个小角
在进口中怎么办转栈???
丽都商务酒店怎么去啊,有知道地址的么
我的世界:假如全世界只剩下钻石,结果会怎样
20l5年红富士苹果什么时间摘袋最好
推荐资讯
股道老铁是谁?这人评股怎么样?
手机开不了机连接上数据线之后就一直有个闪电
新鲜目鱼如何制成目鱼干
关于的tell词组有哪些?
天汽美亚如何调挡风玻璃吹风
was 集群成员 对应的 ip 怎么查
2018年农历八月二十三适不适合结婚,,是吉日
报账单大写一栏900元整,在大写佰前面写上玖
求窥视之瞳的百度云
在O里分别填上3、4、5、6、7,使每条线上的三
自体脂肪全脸填补看起来会不会很假?
杨颖用的是什么手机
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?