打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OpenSSL 编程

OpenSSL 编程 - RSA 加密解密

Posted on 2008-03-14 15:42 NadOo 阅读(3995) 评论(5) 编辑 收藏

这几天做这方面的东西,网上资料很少,贴一个自己试验写的代码,做个记录。
加密:

/*
gcc -o rsa-encrypt rsa-encrypt.c -lcrypto
*/

#include 
<openssl/rsa.h>
#include 
<openssl/err.h>

#define MODULUS "C8FBCF21"
#define PUBLIC_EXPONENT RSA_F4
#define PRIVATE_EXPONENT "97B55D7D"

int main()
{
    
int ret, flen;
    BIGNUM 
*bnn, *bne, *bnd;
    unsigned 
char *in = "abc";
    unsigned 
char *out;

    bnn 
= BN_new();
    bne 
= BN_new();
    bnd 
= BN_new();
    BN_hex2bn(
&bnn, MODULUS);
    BN_set_word(bne, PUBLIC_EXPONENT);
    BN_hex2bn(
&bnd, PRIVATE_EXPONENT);

    RSA 
*= RSA_new();
    r
->= bnn;
    r
->= bne;
    r
->= bnd;
    RSA_print_fp(stdout, r, 
5);

    flen 
= RSA_size(r);// - 11;
    out = (char *)malloc(flen);
    bzero(
out, flen);
    
//memset(out, 0, flen);

    printf(
"Begin encrypt... ");
    ret 
= RSA_private_encrypt(flen, inout, r,  RSA_NO_PADDING);
    
if (ret < 0)
    
{
        printf(
"Encrypt failed! ");
        
return 1;
    }


    printf(
"Size:%d ", ret);
    printf(
"ClearText:%s "in);
    printf(
"CipherText(Hex):");
    
int i;
    
for (i=0; i<ret; i++)
    
{
        printf(
"0x%02x, "*out);
        
out++;
    }

    printf(
" ");

    
//free(out);
    RSA_free(r);
    
return 0;
}

 

解密:

/*
gcc -o rsa-decrypt rsa-decrypt.c -lcrypto
*/

#include 
<openssl/rsa.h>

#define MODULUS "C8FBCF21"
#define PUBLIC_EXPONENT RSA_F4
#define PRIVATE_EXPONENT "97B55D7D"

int main()
{
    
int ret, flen;
    BIGNUM 
*bnn, *bne;
    unsigned 
char in[] = {0x980x790xb20x76};
    unsigned 
char *out;

    bnn 
= BN_new();
    bne 
= BN_new();
    BN_hex2bn(
&bnn, MODULUS);
    BN_set_word(bne, PUBLIC_EXPONENT);

    RSA 
*= RSA_new();
    r
->= bnn;
    r
->= bne;
    RSA_print_fp(stdout, r, 
5);

    flen 
= RSA_size(r);
    
out = (unsigned char *)malloc(flen);
    bzero(
out, flen);

    printf(
"Begin decrypt... ");
    ret 
= RSA_public_decrypt(sizeof(in), inout, r, RSA_NO_PADDING);
    
if (ret < 0)
    
{
        printf(
"Decrypt failed! ");
        
return 1;
    }


    printf(
"Size:%d ", ret);
    printf(
"ClearText:%s "out);

    free(
out);
    RSA_free(r);
    
return 0;
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用指定的n,e,d生成RSA的数据结构
《openssl 编程》之 RSA
openssl - 获得public key
math.h
C语言实现程序开机自启动
用openssl进行ssl编程--sagely's blog
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服