今天用 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);
}
1
jukka 2015-12-12 21:35:51 +08:00
google: c openssl rsa example
|
2
Xbluer 2015-12-12 22:33:31 +08:00
不用 google , man RSA_public_encrypt 即可。
RSA_PKCS1_PADDING 模式下,明文长度 < rsa_len - 11 |
3
semicircle21 2015-12-13 18:23:57 +08:00
我并不是安全工程师, 只是普通程序员, 所以, 不那么靠谱的安利一下:
cryptopp 比 openssl 好用多了 ... |
5
larkifly OP @semicircle21 性能怎么样?
|
6
kimmykuang 2015-12-14 12:45:14 +08:00 via Android
@Xbluer 超过了会直接报错而不是截断吗
|
7
Xbluer 2015-12-14 18:42:19 +08:00
@kimmykuang 不会直接截断。直接截断产生的结果(即密文)是错误的,不符合函数定义的功能。如果需要加密的明文长度较长,则需要分组加密。
|
8
taozhijiangscu 2015-12-15 15:22:03 +08:00
openssl 自带很多例子, grep 一下游没有相似的呢
|
9
taozhijiangscu 2015-12-15 15:24:57 +08:00
@taozhijiangscu
https://github.com/taozhijiang/st_utils/blob/master/source/st_openssl.c 一般是 AES 块加密,速度性能比较好, RSA 用来加密加密串就好了 |