• 请不要在回答技术问题时复制粘贴 AI 生成的内容
larkifly
V2EX  ›  程序员

C 语言如何利用 openssl 进行 rsa pkcs1 加密

  •  
  •   larkifly · Dec 12, 2015 · 5455 views
    This topic created in 3845 days ago, the information mentioned may be changed or developed.

    今天用 no_padding 没问题,用 pkcs1 就报错。报错如下:
    140310769923944:error:0406D06E:lib(4):func(109):reason(110):rsa_pk1.c:151

    代码如下:

    char *rsa_encrypt(char *plain, char *to, char *key_path) {
        char *p_en;
        RSA *p_rsa;
        FILE *file;
        int f_len, rsa_len;
        if((file = fopen(key_path, "r")) == NULL){
            perror("open file error");
            return NULL;
        }
    
        if((p_rsa = PEM_read_RSAPublicKey(file, NULL, NULL, NULL)) ==  NULL){
            ERR_print_errors_fp(stdout);
            return NULL;
        }
    
        f_len = strlen(plain);
        rsa_len = RSA_size(p_rsa);
        p_en = (char *)malloc(rsa_len+1);
        memset(to, 0, rsa_len+1);
        if(RSA_public_encrypt(rsa_len, (unsigned char*)plain, (unsigned char*)p_en, p_rsa, RSA_PKCS1_PADDING) < 0){
            ERR_print_errors_fp(stdout);
            return NULL;
        }
        strcpy(to, (char *)p_en);
        RSA_free(p_rsa);
        fclose(file);
    }
    
    9 replies    2015-12-15 15:24:57 +08:00
    jukka
        1
    jukka  
       Dec 12, 2015
    google: c openssl rsa example
    Xbluer
        2
    Xbluer  
       Dec 12, 2015
    不用 google , man RSA_public_encrypt 即可。
    RSA_PKCS1_PADDING 模式下,明文长度 < rsa_len - 11
    semicircle21
        3
    semicircle21  
       Dec 13, 2015
    我并不是安全工程师, 只是普通程序员, 所以, 不那么靠谱的安利一下:
    cryptopp 比 openssl 好用多了 ...
    larkifly
        4
    larkifly  
    OP
       Dec 14, 2015
    @jukka
    @Xbluer

    google 了,并没有 google 到
    larkifly
        5
    larkifly  
    OP
       Dec 14, 2015
    @semicircle21 性能怎么样?
    kimmykuang
        6
    kimmykuang  
       Dec 14, 2015 via Android
    @Xbluer 超过了会直接报错而不是截断吗
    Xbluer
        7
    Xbluer  
       Dec 14, 2015
    @kimmykuang 不会直接截断。直接截断产生的结果(即密文)是错误的,不符合函数定义的功能。如果需要加密的明文长度较长,则需要分组加密。
    taozhijiangscu
        8
    taozhijiangscu  
       Dec 15, 2015
    openssl 自带很多例子, grep 一下游没有相似的呢
    taozhijiangscu
        9
    taozhijiangscu  
       Dec 15, 2015
    @taozhijiangscu
    https://github.com/taozhijiang/st_utils/blob/master/source/st_openssl.c

    一般是 AES 块加密,速度性能比较好, RSA 用来加密加密串就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   904 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 21:11 · PVG 05:11 · LAX 14:11 · JFK 17:11
    ♥ Do have faith in what you're doing.