RSA 使用 EME-OAEP 填充并以 SHA-256 作为哈希函数

问题描述 投票:0回答:1

我一直在自动登录,在发送密码之前使用 WebCrypto API 对客户端上的密码进行加密。

具体来说,它使用 RSA-OAEP 并基本上遵循 MDN github 中的示例:

let key = window.crypto.subtle.importKey(
    "spki", binaryDer,
    { name: "RSA-OAEP", hash: "SHA-256" },
    true, ["encrypt"]
);

let ciphertext = window.crypto.subtle.encrypt(
    { name: "RSA-OAEP" },
    key, cleartext
);

我想在 Perl 中执行此操作,但是

Crypt::OpenSSL::RSA
仅支持

EME-OAEP 填充如 PKCS #1 v2.0 中定义,具有 SHA-1、MGF1

...我既没有找到更改填充的哈希函数的方法,也没有找到另一个用于该工作的模块。

所以我不得不调用

openssl
二进制文件并像这样加密密码:

openssl pkeyutl -in cleartext.txt -encrypt -pubin -inkey key.pem \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256

这可行,但是我想知道是否有办法仅使用 perl 来实现此目的。

perl encryption openssl rsa oaep
1个回答
0
投票

既然Shawn还没有回复,那我就自己来回答了。

他使用 Crypt::PK::RSA 的建议是正确的。这个库非常棒,因为它完全没有依赖关系,并且涵盖了大量的加密方法。强烈推荐。

对于我的问题中概述的用例;这是如何实现的:

use strict;
use Crypt::PK::RSA;
use MIME::Base64;

my $pubkey = <<EOKEY;
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHlYKg9DeHB3/dY1D9WCyJTnl5
vEzAXpUOL9tDtdPUl96brIbbdMLooO1hKjsq98kLs1q4vOn/pxvzk0BRwhiu7Vvb
VUjAn/2HHDDL0U1utqqlMJhaffeLI3HEq5o/lSMFY7sSkZU/E4YX1yqAN0SE7xfK
B2uzcNq60sMIfp6siQIDAQAB
-----END PUBLIC KEY-----
EOKEY

my $pk = Crypt::PK::RSA->new(\$pubkey);
my $cleartext = 'pAsSwOrD';
my $ciphertext = encode_base64( $pk->encrypt($cleartext, 'oaep', 'SHA256', ''), '' );

print $ciphertext."\n";
© www.soinside.com 2019 - 2024. All rights reserved.