OpenSSL 编程 - RSA 加密解密

http://blog.csdn.net/nadoo/article/details/2156384


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

加密:

/*
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值