首页
社区
课程
招聘
[求助]openssl中有公私钥内存数据,如何构建一个RSA对象出来?
发表于: 2016-1-3 08:09 5238

[求助]openssl中有公私钥内存数据,如何构建一个RSA对象出来?

2016-1-3 08:09
5238
unsigned char MyArray [0x0080] =
        {
                0x91, 0x43, 0x7c, 0xd8, 0x3d, 0x07, 0x22, 0xce, 0x41, 0x0b, 0xd9, 0x6c, 0xa8, 0x0c, 0xff, 0x34,
                0x89, 0x5a, 0x31, 0x5e, 0x25, 0x12, 0x8b, 0xc3, 0x25, 0x29, 0xd5, 0xf6, 0x14, 0xe4, 0x50, 0x97,
                0xe1, 0x2e, 0x45, 0x0c, 0x68, 0xda, 0xf1, 0xad, 0x8d, 0x8e, 0x74, 0x0a, 0xb7, 0x08, 0x56, 0x4f,
                0x4f, 0x31, 0x7b, 0x80, 0x12, 0xc4, 0x48, 0x56, 0xde, 0x56, 0x7d, 0x58, 0x52, 0x24, 0x97, 0xdb,
                0xf3, 0x84, 0xff, 0x17, 0xa8, 0x16, 0x5a, 0x0e, 0xce, 0xb0, 0xa5, 0x26, 0xf5, 0x44, 0x12, 0xa9,
                0x9a, 0x88, 0xec, 0x69, 0x68, 0xb5, 0xe1, 0x4f, 0xaf, 0x7a, 0x08, 0xbe, 0xe9, 0x2f, 0xfd, 0xe3,
                0x5b, 0x18, 0xc5, 0x46, 0x97, 0xd8, 0x6e, 0xcc, 0x63, 0x97, 0x00, 0xe6, 0x42, 0xbc, 0x91, 0x75,
                0x7e, 0x52, 0x2d, 0xc5, 0xef, 0x4c, 0x95, 0xcc, 0xd7, 0x46, 0xd2, 0xd2, 0x59, 0xdb, 0x00, 0xc5
        };

以上是两组512位的密钥,如何构建一个RSA对象出来?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
// openssl_rsa.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<openssl/rsa.h>
#include<openssl/pem.h>
#include<openssl/err.h>
#pragma comment(lib, "d:\\opensll\\lib\\libeay32")

using namespace std;
#define BUFFSIZE 4096

unsigned char key1 [0x40] =
{
        0x91, 0x43, 0x7c, 0xd8, 0x3d, 0x07, 0x22, 0xce, 0x41, 0x0b, 0xd9, 0x6c, 0xa8, 0x0c, 0xff, 0x34,
        0x89, 0x5a, 0x31, 0x5e, 0x25, 0x12, 0x8b, 0xc3, 0x25, 0x29, 0xd5, 0xf6, 0x14, 0xe4, 0x50, 0x97,
        0xe1, 0x2e, 0x45, 0x0c, 0x68, 0xda, 0xf1, 0xad, 0x8d, 0x8e, 0x74, 0x0a, 0xb7, 0x08, 0x56, 0x4f,
        0x4f, 0x31, 0x7b, 0x80, 0x12, 0xc4, 0x48, 0x56, 0xde, 0x56, 0x7d, 0x58, 0x52, 0x24, 0x97, 0xdb
};
unsigned char key2 [0x40] =
{
        0xf3, 0x84, 0xff, 0x17, 0xa8, 0x16, 0x5a, 0x0e, 0xce, 0xb0, 0xa5, 0x26, 0xf5, 0x44, 0x12, 0xa9,
        0x9a, 0x88, 0xec, 0x69, 0x68, 0xb5, 0xe1, 0x4f, 0xaf, 0x7a, 0x08, 0xbe, 0xe9, 0x2f, 0xfd, 0xe3,
        0x5b, 0x18, 0xc5, 0x46, 0x97, 0xd8, 0x6e, 0xcc, 0x63, 0x97, 0x00, 0xe6, 0x42, 0xbc, 0x91, 0x75,
        0x7e, 0x52, 0x2d, 0xc5, 0xef, 0x4c, 0x95, 0xcc, 0xd7, 0x46, 0xd2, 0xd2, 0x59, 0xdb, 0x00, 0xc5
};
char * Base64Encode(const char * input, int length, bool with_new_line)  
{  
        BIO * bmem = NULL;  
        BIO * b64 = NULL;  
        BUF_MEM * bptr = NULL;  

        b64 = BIO_new(BIO_f_base64());  
        if(!with_new_line) {  
                BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);  
        }  
        bmem = BIO_new(BIO_s_mem());  
        b64 = BIO_push(b64, bmem);  
        BIO_write(b64, input, length);  
        BIO_flush(b64);  
        BIO_get_mem_ptr(b64, &bptr);  

        char * buff = (char *)malloc(bptr->length + 1);  
        memcpy(buff, bptr->data, bptr->length);  
        buff[bptr->length] = 0;  

        BIO_free_all(b64);  

        return buff;  
}  

char * Base64Decode(char * input, int length, bool with_new_line)  
{  
        BIO * b64 = NULL;  
        BIO * bmem = NULL;  
        char * buffer = (char *)malloc(length);  
        memset(buffer, 0, length);  

        b64 = BIO_new(BIO_f_base64());  
        if(!with_new_line) {  
                BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);  
        }  
        bmem = BIO_new_mem_buf(input, length);  
        bmem = BIO_push(b64, bmem);  
        BIO_read(bmem, buffer, length);  

        BIO_free_all(bmem);  

        return buffer;  
}  

char *my_encrypt(char *str)
{
    RSA *rsa = NULL;
    FILE *fp = NULL;
    char *en = NULL;
    int len = 0;
    int rsa_len = 0;

        rsa = RSA_new();
        // 这里该如何用上面的key构建一个RSA对象?
        RSA_print_fp(stdout, rsa, 0);

    len = strlen(str);
    rsa_len = RSA_size(rsa);

    en = (char *)malloc(rsa_len + 1);
    memset(en, 0, rsa_len + 1);

    if (RSA_public_encrypt(rsa_len, (unsigned char *)str, (unsigned char*)en, rsa, RSA_NO_PADDING) < 0) {
        return NULL;
    }

    RSA_free(rsa);

    return en;
}

char *my_decrypt(char *str)
{
    RSA *rsa = NULL;
    FILE *fp = NULL;
    char *de = NULL;
    int rsa_len = 0;

        rsa = RSA_new();
  
    RSA_print_fp(stdout, rsa, 0);

    rsa_len = RSA_size(rsa);
    de = (char *)malloc(rsa_len + 1);
    memset(de, 0, rsa_len + 1);

    if (RSA_private_decrypt(rsa_len, (unsigned char *)str, (unsigned char*)de, rsa, RSA_NO_PADDING) < 0) {
        return NULL;
    }

    RSA_free(rsa);
  
    return de;
}

int main(int argc, char *argv[])
{
    char *src = "hello, world!";
    char *en = NULL;
    char *de = NULL;

    printf("src is: %s\n", src);

    en = my_encrypt(src);
    printf("enc is: %s\n", en);

    de= my_decrypt(en);
    printf("dec is: %s\n", de);

    if (en != NULL) {
        free(en);
    }

    if (de != NULL) {
        free(de);
    }

    return 0;
}
2016-1-3 08:11
0
游客
登录 | 注册 方可回帖
返回
//