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

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

  •  
  •   larkifly · Dec 12, 2015 · 5754 views
    This topic created in 3982 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
    jukka
    Dec 12, 2015
    1
    google: c openssl rsa example
    Xbluer
    Xbluer
    Dec 12, 2015
    2
    不用 google , man RSA_public_encrypt 即可。
    RSA_PKCS1_PADDING 模式下,明文长度 < rsa_len - 11
    semicircle21
    semicircle21
    Dec 13, 2015
    3
    我并不是安全工程师, 只是普通程序员, 所以, 不那么靠谱的安利一下:
    cryptopp 比 openssl 好用多了 ...
    larkifly
    larkifly
    OP
    Dec 14, 2015
    4
    @jukka
    @Xbluer

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

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