我正在尝试将以下 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 似乎没有办法显式设置。
在 IRC 上完成,为世界其他地方记录它:它完全没有记录,但是Crypt::RSA::Key
does有称为n
, e
, and d
对应于模数、公共指数和私有指数。检查函数中的模错误(即supposed工作如果p
and q
不可用但是n
是,但实际上不是),可以使用这些方法创建工作密钥。
我们通过创建一个子类来共同解决这个问题Crypt::RSA::Key::Private
使用解码 Base64 编码的工厂方法(使用MIME::Base64::URLSafe http://search.cpan.org/perldoc/MIME::Base64::URLSafe)和附加的二进制编码(使用数学::BigInt http://search.cpan.org/perldoc/Math::BigInt->from_hex 和unpack "H*"
)然后设置这三个私有成员,以及Crypt::RSA
模块能够接受它作为密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)