我想在PHP中實(shí)現(xiàn)這段用于銀行支付的代碼。有人能幫我嗎?謝謝。
ASCIIEncoding ByteConverter = new ASCIIEncoding(); string dataString = "Data to Sign"; ? byte[] originalData = ByteConverter.GetBytes(dataString); byte[] signedData; RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); String PrivateKey= File.ReadAllText(Application.StartupPath + "PrivateKey.xml"); RSAalg.FromXmlString(PrivateKey); signedData = Key.SignData(originalData,SHA1.Create()); String base64String = Convert.ToBase64String(signedData, 0, signedData.Length); ?
我已經(jīng)嘗試過了,但是沒有得到任何結(jié)果。由于請(qǐng)求的問題,我得到了一個(gè)符號(hào)錯(cuò)誤。
$baseString = "Data to Sign"; $signedData = null; $privateKey = file_get_contents(config_path("PrivateKey.pem")); $privateKeyResource = openssl_pkey_get_private($privateKey); $signature = null; if (openssl_sign($baseString, $signedData, $privateKeyResource, OPENSSL_ALGO_SHA1)) $signature = base64_encode($signedData);
我猜測(cè)數(shù)據(jù)字符串/基本字符串的編碼錯(cuò)誤。
在C#中,默認(rèn)的字符串編碼是UTF-16,在php中,字符串的編碼自動(dòng)為ASCII,但是如果字符串中出現(xiàn)不支持的字符,則編碼會(huì)自動(dòng)更改為UTF-8 - 所以這取決于$baseString包含的字符串,您可以使用mb_detect_encoding方法檢查編碼是否仍然是預(yù)期的ASCII編碼。