QomoIT / OpenSSL / OpenSSL 编程

分享

   

OpenSSL 编程

2011-11-18  QomoIT

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>