Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#&;中加密&;使用PEM文件在PHP中解密_C#_Php_Encryption_Rsa_Pem - Fatal编程技术网

在C#&;中加密&;使用PEM文件在PHP中解密

在C#&;中加密&;使用PEM文件在PHP中解密,c#,php,encryption,rsa,pem,C#,Php,Encryption,Rsa,Pem,我正在寻找解决方案,但找不到功能解决方案。 我需要将一个字符串(AESkey)从C#app传输到PHP服务器。 客户端(在C#中)下载key.public.pem文件(公钥)并加密密码,然后将其发送到服务器。 服务器接受key.pem文件(私钥) PHP中的服务器: function RSADecryption($text) { //re() reads a document an return it as string openssl_private_decrypt(base6

我正在寻找解决方案,但找不到功能解决方案。 我需要将一个字符串(AESkey)从C#app传输到PHP服务器。 客户端(在C#中)下载key.public.pem文件(公钥)并加密密码,然后将其发送到服务器。 服务器接受key.pem文件(私钥)

PHP中的服务器:

function RSADecryption($text) {
    //re() reads a document an return it as string
    openssl_private_decrypt(base64_decode($text), $decrypted,re("key.pem"));
    return $decrypted;
}
C#中的客户:

后来我在main做了类似的事情:

MyRSA rsa = MyRSA.getMyRSA();
rsa.setPubKey(site+"key.public.pem");
sendData(rsa.crypt(user));
我认为问题出在解密程序(PHP函数)中,因为它不返回任何内容。 我不知道,但是,也许问题是你不能用RSACryptServiceProvider加密,不能用openssl解密? 因为他们使用不同的参数或其他类似的东西

例如,我生成了这个AES密钥:

cA?uW=kImEYGsgu

我使用这个公钥

-----开始公钥----- Miibijanbgkqhkig9w0BaqefaaoCaq8amiibcgkcaqeapxjhdvcuafpzme//cOM OVxBZvMXjwlcyaCfnTuVdbewQ5ITu6hlJ3vX/oTMbik7DprsWoc2tGk3Rx7RdAPd N3VNPM62QJAKTEWJ8/5Nzf+MxlVD0t5tzqzhniZ5BKZTtvCI6STbrFYnKcJwTyI EAEDNTRE5EAQEBBRYHLGTRXNMZ2SDRI9ICSW9PJDVDDJDZMHENHASMFQMEO7N IS8AY3zJSjOQPKFymZrSa8hxWp88K1/igxs12IhhpqNjMiUi29gH2T+QLPTZWEQ EHTY1K6B0ZLNUYP8R5PNOQYYMDNOSPCV3Z0DETOBAF7KIFYP2PXVONO8PC19YL0 姆齐达卡布 -----结束公钥-----

加密密码为:

3.中国政府3 3 3 3 3 3 3中国政府3 3 3中国政府3 3 3 3中国政府3 3 3中国政府3 3中国政府3 3中国政府3 3 3中国政府3 3 3中国政府3 3 3中国政府3 3 3中国政府3 3 3中国政府3 3 3中国政府3 3 3 3中国政府3 3 3 3中国政府3 3 3 3中国政府3中国政府3 8中国政府8中国政府8中国政府8中国政府8中国政府4中国政府4 4中国政府4中国ZZZZZ7中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府4中国政府8中国政府4中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府8中国政府2N4AXBTYRLTUN4MJDO+pYS3HqZlGn2MW5Orc9VH+1CPn2omLVj/qqa6tIoFuJOdpxn/y9

谢谢你的帮助。 关于。

如果您的.PEM文件显示“开始公钥”,那么它可能是一个X.509 SubjectPublicKeyInfo结构。这意味着它看起来像

30 xx  // SEQUENCE (SubjectPublicKeyInfo)
  30 0D  // SEQUENCE (AlgorithmIdentifier)
     06 09 2A 86 48 86 F7 0D 01 01 01  // OID (algorithm = rsaEncryption)
     05 00 // NULL (parameters)
  03 xx  // BIT STRING (subjectPublicKey)
     30 xx  // SEQUENCE (RSAPublicKey)
        02 xx [modulus value here]  // INTEGER (Modulus)
        02 xx [exponent value here]  // INTEGER (Exponent)
这是一个DER编码的blob。每个
xx
值都代表一个长度,可以超过一个字节

因此,当你加载这个键时,你会获取所有的开销/结构内容,以及模数字节和指数字节,并调用所有的模数。因此,最终的效果是,您使用的公钥与解密时使用的公钥不同

NET并不能使阅读PEM关键内容变得容易。您最好将此密钥转换为证书。如果您还没有证书,您可以执行
openssl req-x509-new-key theprivatekey.pem-out selfsignedcert.cer
(并回答主题提示的任何问题)

否则,您现在将被简化为(以及其他相关问题)。

如果.PEM文件显示“开始公钥”,那么它可能是一个X.509 SubjectPublicKeyInfo结构。这意味着它看起来像

30 xx  // SEQUENCE (SubjectPublicKeyInfo)
  30 0D  // SEQUENCE (AlgorithmIdentifier)
     06 09 2A 86 48 86 F7 0D 01 01 01  // OID (algorithm = rsaEncryption)
     05 00 // NULL (parameters)
  03 xx  // BIT STRING (subjectPublicKey)
     30 xx  // SEQUENCE (RSAPublicKey)
        02 xx [modulus value here]  // INTEGER (Modulus)
        02 xx [exponent value here]  // INTEGER (Exponent)
这是一个DER编码的blob。每个
xx
值都代表一个长度,可以超过一个字节

因此,当你加载这个键时,你会获取所有的开销/结构内容,以及模数字节和指数字节,并调用所有的模数。因此,最终的效果是,您使用的公钥与解密时使用的公钥不同

NET并不能使阅读PEM关键内容变得容易。您最好将此密钥转换为证书。如果您还没有证书,您可以执行
openssl req-x509-new-key theprivatekey.pem-out selfsignedcert.cer
(并回答主题提示的任何问题)


否则,您现在只能回答(以及其他相关问题)。

这是一个潜在的好问题。至少很有趣。你能描述一下你自己做了什么来解决这个问题吗?在什么时候你陷入了困境?(请不要在评论中描述,而是编辑问题。)私钥是否实际用于生产环境?如果不是的话,我会说把它寄出去。这样人们就可以把它纳入你的答案中。完全有可能问题很简单,因为openssl不支持私钥的格式。如果没有私钥,这真的很难说。这是一个潜在的好问题。至少很有趣。你能描述一下你自己做了什么来解决这个问题吗?在什么时候你陷入了困境?(请不要在评论中描述,而是编辑问题。)私钥是否实际用于生产环境?如果不是的话,我会说把它寄出去。这样人们就可以把它纳入你的答案中。完全有可能问题很简单,因为openssl不支持私钥的格式。没有私钥,真的很难说。