encryption - RSA 私钥格式

标签 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 字节长(包括末尾的八个破折号填充)。

在“分解”之后,他们使用分解的部分来解密 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]))

如何转换此 key 以便 OpenSSL 知道如何使用它?

最佳答案

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

ruby 标准库包含一个 OpenSSL binding .

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

key.to_pem()

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

关于encryption - RSA 私钥格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536903/

相关文章:

c# - 如何修复 Rijndael 解密中的 'Org.BouncyCaSTLe.Crypto.InvalidCipherTextException: ' pad block corrupted''

java - 在下面添加版本 ---BEGIN PGP MESSAGE---

java - Android 和 Java 环境之间的 RSA 加密差异

public-key-encryption - 在签署 SAML 请求时使用哪个公钥(SP 或远程 IDP)

swift - 测试 CryptoKit 的数据验证

java - 加密 - 使用 AES/BlowFish/DESede 和 Enum 解密

c# - .NET 加密字节数组

python - 使用 Azure Active Directory B2C 中的签名验证 ID token

Java RSA 为什么每次都有不同的密文?

java - 无法在JAVA中生成RSAPublicKey