【发布时间】:2014-08-19 08:57:32
【问题描述】:
我有一个 C 应用程序,在这个应用程序中,我使用以下代码生成一个 RSA 密钥对(由于可读性而留下错误检查):
void generateKeyPair(char* pass) {
EVP_PKEY *pkey = NULL;
RSA* r;
OpenSSL_add_all_algorithms();
RAND_load_file("/dev/urandom", 1024);
r = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, r);
FILE* fp = fopen("private.key", "w");
PEM_write_PrivateKey(fp, pkey, EVP_aes_256_cbc(), NULL, 0, NULL, pass);
fclose(fp);
fp = fopen("public.key", "w");
PEM_write_PUBKEY(fp, pkey);
fclose(fp);
}
我通过设备之间的服务器同步公共 PEM 密钥。现在我必须编写一个兼容的 Android 应用程序,尽管我必须生成与 PEM_write_PUBKEY 相同格式的公钥。
我知道我应该以 DER 格式或其他方式进行同步,但现在我不能再更改设计了。无法生成类似格式的密钥。
我猜它是#PCKS1 base64 编码的密钥,但我不确定,也不知道如何在 Android 中生成类似的密钥 - Android 的标准是 #PCKS8。但是,如果有办法的话,我不希望在我的项目中包含海绵城堡。
【问题讨论】:
-
PKCS#8 用于私钥。
标签: android openssl rsa public-key