在C#&;中加密&;使用PEM文件在PHP中解密
我正在寻找解决方案,但找不到功能解决方案。 我需要将一个字符串(AESkey)从C#app传输到PHP服务器。 客户端(在C#中)下载key.public.pem文件(公钥)并加密密码,然后将其发送到服务器。 服务器接受key.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
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不支持私钥的格式。没有私钥,真的很难说。