如何从模数,指数和私有指数创建Crypt :: RSA对象?

时间:2010-07-30 01:18:57

标签: php perl rsa

我正在尝试将以下php功能移植到perl:

public function loadKey($mod, $exp, $type = 'public')
{
    $rsa = new Crypt_RSA();
    $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
    $rsa->setHash('sha256');
    $rsa->modulus = new Math_BigInteger(Magicsig::base64_url_decode($mod), 256);
    $rsa->k = strlen($rsa->modulus->toBytes());
    $rsa->exponent = new Math_BigInteger(Magicsig::base64_url_decode($exp), 256);

    // snip...
}

我需要转换表单中的字符串(“RSA。$ mod。$ exp。$ private_exp”):

RSA.mVgY8RN6URBTstndvmUUPb4UZTdwvwmddSKE5z_jvKUEK6yk1u3rrC9yN8k6FilGj9K0eeUPe2hf4Pj-5CmHww==.AQAB.Lgy_yL3hsLBngkFdDw1Jy9TmSRMiH6yihYetQ8jy-jZXdsZXd8V5ub3kuBHHk4M39i3TduIkcrjcsiWQb77D8Q==

...到Crypt :: RSA对象。我已经拆分了组件,所以我有$ mod,$ exp和$ private_exp,但perl Crypt :: RSA API似乎没有办法明确设置。

1 个答案:

答案 0 :(得分:5)

在IRC上工作,在这里为世界其他地方记录:它完全没有记录,但Crypt::RSA::Key ne的方法,和d对应于模数,公共指数和私有指数。检查函数中的模块错误(如果pq不可用,假定工作,但n是,但实际上没有),这是可能的用这些方法创建一个工作密钥。

我们通过使用工厂方法创建Crypt::RSA::Key::Private的子类来解决问题,该工厂方法解码base64编码(使用MIME::Base64::URLSafe)和附加二进制编码(使用Math::BigInt - > from_hex和unpack "H*")然后设置这三个私有成员,Crypt::RSA模块能够接受它作为密钥。