0

Below is the c# coding I used to sign data but I couldn't get back the same signed data compare to openssl_sign in php

     public static string SignData(string clearText)
        {
            var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);

            StreamReader sr = new StreamReader("./keys/private.pem");
            PemReader pr = new PemReader(sr);
            var keyPair = (RsaPrivateCrtKeyParameters)pr.ReadObject();
            var rsaParameters = DotNetUtilities.ToRSAParameters(keyPair);

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.ImportParameters(rsaParameters);

            var sig = rsa.SignData(bytesToEncrypt, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

            return Convert.ToBase64String(sig);

        }

PHP

    public static function encrypt($timestamp, $url, $datajson){
    
        
        if(openssl_sign($signatureRawData, $x_mb_signature, static::Private_key, OPENSSL_ALGO_SHA256)){
            $output = base64_encode($x_mb_signature);
        }

        return $output;
    }
  • 1
    Where do `$signatureRawData` and `static::Private_key` come from? What data types are they? – Charlieface Apr 16 '23 at 10:16
  • private_key sample as below and for my C# are refer to the same private key as well, when using openssl_sign from ssl is getting the correct signed data(verified by vendor side) but when using the c# signed function is getting the wrong 1 -----BEGIN PRIVATE KEY----- key content -----END PRIVATE KEY----- sample signatureRawData data POST;https%3A%2F%2Fwww.google.com%2F – Lawrence Lai Apr 16 '23 at 10:32
  • If you have .NET 5+ you can try `var rsa = RSA.Create(); rsa.ImportFromPem(YourPrivateKeyString);` see https://stackoverflow.com/questions/243646/how-to-read-a-pem-rsa-private-key-from-net – Charlieface Apr 16 '23 at 10:35
  • just tried.. same as result before changed it – Lawrence Lai Apr 16 '23 at 11:00

0 Answers0