2

我的经纪人有一个测试页面,在第一部分我包含一个证书 (.crt) 文件

MIIFETCCA/mgAwIBAgIUMDAwMDAwMDAwMDAwM...

第二部分带有我的私钥的加密字符串,原始字符串是“ f2e140eb-2b09-44ab-8504-87b25d81914c”,使用我的私钥生成的加密字符串是:

ugSMAsCQlIKIlQ17exIvSEqkA60eWcnF4AAEVJG3BP4hYcCc+DCKeeHur6X2ShbjYWoeugPJe7AecPO0JY9jG75R67jS1OLUeUkB7HZqXCSzPANKWjQ/vx+0O0PlHHcWI24aUFCSiA2iuNXcssIbt2uJAChegXa7XKgNXxDJm+o=

有一个带有“解密”标签的按钮,当按下它时,我得到:

�����������������������������������������������������������������������������������������f2e140eb-2b09-44ab-8504-87b25d81914c

如您所见,我获得了原始字符串,但开头有很多奇怪的字符,这样我就无法继续签名过程了。

技术说明(也许我做错了什么):第一部分(证书:MIIFETC .....)是通过以下方式获得的:

$filename="instancia_ope.cer";
$imgbinary = fread(fopen($filename, "r"), filesize($filename));
$certificadoInstancia64 = base64_encode($imgbinary);

以及使用我的私钥(ugSMAsCQlIKI ..​​....)加密的字符串:

$llave_priv = file_get_contents("i.pem");  //i.pem is my private key file
$plaintext = "f2e140eb-2b09-44ab-8504-87b25d81914c";
openssl_private_encrypt($plaintext, $encrypted, $llave_priv);
$reto = base64_encode($encrypted);

我从 .key 文件中获得了 i.pem 文件

openssl pkcs8 -inform DER -in instancia_ope.key -out i.pem

我的程序有什么错误吗?我问我的经纪人解密按钮是做什么的,但我没有收到答案。

4

2 回答 2

0

看起来您已经从解密选项中检索了原始结果。但是,查看您的结果,该结果不是由 PKCS#1 v2.1 兼容加密创建的。这可能意味着加密过程有问题。

于 2013-02-15T16:19:06.517 回答
0

看起来您的代理执行普通的教科书 RSA 解密,而不是像 OpenSSL 那样默认使用 PKCS#1 填充 RSA。因此,代理测试应用程序不会删除填充,因此您会得到一个填充的纯文本块。

您可以尝试使用openssl_private_encryptOPENSSL_NO_PADDING的可选第四个参数作为不带任何随机填充的加密:

openssl_private_encrypt($plaintext, $encrypted, $llave_priv, OPENSSL_NO_PADDING);

请注意,在大多数情况下,使用未填充的普通教科书 RSA 本质上是不安全的。一般来说,RSA 应该与安全的随机填充机制一起使用,例如PKCS#1 2.1 OAEP。否则存在很多密码安全问题,例如解密和签名的完全互换性,对包括延展性在内的数学结构的容易攻击,以及缺乏语义安全性。这些可能适用于您的情况,也可能不适用于您的情况,因为您似乎本质上使用的是临时 RSA 签名协议。

于 2013-02-16T22:21:16.697 回答