openssl 版本 1.1.0f
/**
* 公钥加密
* @param data
* @param type 0 为默认,1 为使用的 key1 密钥对,2 为使用的 key2 密钥对
* @return
*/
std::string MyRSA::encryptRSA(const std::string& data, int *lenreturn, int type) {
int ret, flen;
BIO *bio = NULL;
RSA *r = NULL;
if(type == 2){
bio = BIO_new_mem_buf((void *)PUBLICKEY_KEY2, -1);
}else if(type == 1){
bio = BIO_new_mem_buf((void *)PUBLICKEY_KEY1, -1);
}else{
bio = BIO_new_mem_buf((void *)PUBLICKEY, -1);
}
if (bio == NULL) //从字符串读取 RSA 公钥
{
LOGE("BIO_new_mem_buf failed!\n");
}
r = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL);
flen = RSA_size(r);
lenreturn = &flen;
LOGE("wiket test RSA encryptRSA:RSA_size %d", flen);
static std::string text;
text.clear();
char *dst = NULL;
dst = (char *) malloc(flen+1);
memset(dst, 0, flen + 1);
//RSA_PKCS1_PADDING 最大加密长度 为 128 -11
//RSA_NO_PADDING 最大加密长度为 128
ret = RSA_public_encrypt(flen - 11,
(unsigned char*)data.c_str(),
(unsigned char*)dst, r, RSA_PKCS1_PADDING);
LOGE("wiket test RSA encryptRSA:after encryptChar_size %d", strlen(dst));
text.assign(dst);
LOGE("wiket test RSA encryptRSA:after encryptStr_size %d", text.length());
RSA_free(r);
BIO_free_all(bio);
free(dst);
CRYPTO_cleanup_all_ex_data(); //清除管理 CRYPTO_EX_DATA 的全局 hash 表中的数据,避免内存泄漏
return text;
}
然而通过上述函数加密得到的密文长度非固定 128 位
请问大神们,如果需要最终得到的密文( dst )长度固定为 128 该如何实现?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.