我试图找到一种方法来使用 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 个破折号填充)。
在“分解”之后,他们使用分解的部分来解密会话 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 知道如何使用它?