C#相当于PHP openssl_public_decrypt

时间:2013-03-21 23:37:37

标签: c# php encryption cryptography

PHP函数openssl_public_decrypt的C#等价物是什么?

我尝试过使用RSACryptoProvider,但api不允许我在没有私钥的情况下解密,

我需要创建提供数据的哈希值,然后与提供的签名进行比较

PHP中的

$key = openssl_get_publickey('provided_public_key'));
openssl_public_decrypt(base64_decode($_GET['signature']), $hashExpected, $key);

所以我的问题是如何在c#中生成hashExpected?

由于

1 个答案:

答案 0 :(得分:0)

没有一个:.NET Framework没有附带OpenSSL。

您可以在.NET中使用OpenSSL的包装器:http://openssl-net.sourceforge.net/但它没有openssl_public_decrypt的直接模拟,因为它提供了一个紧密的包装。

.NET附带了丰富的System.Cryptography命名空间。

查看PHP的openssl源代码(此处:https://github.com/frice2014/php_source/blob/467ed5d6edff72219afd3e644516f131118ef48e/ext/openssl/php_openssl.c),我们看到openssl_public_decrypt调用RSA_public_decrypt,但这是一个实现细节。 PHP的openssl_public_decrypt函数的文档没有指定它使用的算法,因此您不能依赖其他RSA实现读取的数据,例如.NET。

我假设您正在尝试编写可与PHP互操作的C#,而不是直接替换它。在这种情况下,我建议更改您的PHP实现,以便您知道完全正在使用什么加密算法(完成任何IV和密码块模式),因为没有那些你不能让两者可靠地工作在一起。