【问题标题】:RSA private key formatRSA 私钥格式
【发布时间】:2013-01-26 12:21:47
【问题描述】:

我试图找到一种方法来使用 OpenSSL 在 Ruby 中复制 mega.co.nz 的会话 ID 解码。但很遗憾,我不是密码学专家。

问题是我不理解/识别私钥格式

这是他们分解私钥的代码(https://eu.static.mega.co.nz/crypto.js):

// decompose private key
for (var i = 0; i < 4; i++)
{
    var l = ((privk.charCodeAt(0)*256+privk.charCodeAt(1)+7)>>3)+2;

    rsa_privk[i] = mpi2b(privk.substr(0,l));
    if (typeof rsa_privk[i] == 'number') break;
    privk = privk.substr(l);
}

privk 本身是 656 字节长(包括末尾的 8 个破折号填充)。

在“分解”之后,他们使用分解后的部分来解密 session-id (https://eu.static.mega.co.nz/rsa.js):

// Compute m**d mod p*q for RSA private key operations.

function RSAdecrypt(m (encrypted session-id), d (rsa_privk[2]), p (rsa_privk[0]), q (rsa_privk[1]), u (rsa_privk[3]))

如何转换这个密钥以便 OpenSSL 知道如何使用它?

【问题讨论】:

  • 你有测试密钥来显示密钥的样子吗?

标签: encryption rsa public-key-encryption


【解决方案1】:

OpenSSL 支持不同的密钥格式,包括PEM/X.509PKCS8

ruby 标准库包含一个OpenSSL binding

使用in this post提供的方法,您可以从指数创建密钥,然后使用示例

key.to_pem()

将其转换为 X.509 格式的字符串。

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2012-09-26
    • 2018-08-04
    相关资源
    最近更新 更多