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

Ste*_*Ivy 6 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...
}
Run Code Online (Sandbox Code Playgroud)

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

RSA.mVgY8RN6URBTstndvmUUPb4UZTdwvwmddSKE5z_jvKUEK6yk1u3rrC9yN8k6FilGj9K0eeUPe2hf4Pj-5CmHww==.AQAB.Lgy_yL3hsLBngkFdDw1Jy9TmSRMiH6yihYetQ8jy-jZXdsZXd8V5ub3kuBHHk4M39i3TduIkcrjcsiWQb77D8Q==
Run Code Online (Sandbox Code Playgroud)

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

hob*_*bbs 5

制定了在IRC上,这里记录它为世界各地的:它是完全没有证件,但Crypt::RSA::Key 有方法叫n,e以及d对应于模量,公开指数,以及私人指数.在检查功能模错误(这是假设,如果工作pq不可用,但n是,但实际上并非如此),它可以创建这些方法的工作重点.

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