RSA私钥格式

时间:2013-01-26 12:21:48

标签: encryption rsa public-key-encryption

我试图找到一种方法来使用OpenSSL复制Ruby中mega.co.nz的session-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字节(在末尾包含八个破折号)。

'分解'后,他们使用分解的部分来解密会话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知道如何使用它?

1 个答案:

答案 0 :(得分:1)

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

ruby​​标准库包含OpenSSL binding

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

key.to_pem()

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