【问题标题】:How to generate a RSA key in Android similar to an OpenSSL PEM_write_PUBKEY generated key如何在 Android 中生成类似于 OpenSSL PEM_write_PUBKEY 生成密钥的 RSA 密钥
【发布时间】: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


【解决方案1】:

你很幸运;看来您只需要对您的公钥进行 PEM 编码,因为 Java 和 OpenSSL 都使用用于 X5.09 证书的相同 SubjectPublicKey 结构。您可以通过运行 RSAPublicKey.encode() 来达到此目的。

不幸的是,我不知道任何其他执行 PEM 编码的库,但我相信如果需要,您可以从 Bouncy 或 Spongy 中删除代码; Bouncy Castle 图书馆的许可结构非常宽松。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多