Я пытаюсь построить простой процесс шифрования RSA-шифрования между C# и PHP. Я выполнил шифрование в PHP и decrpyt в C# с phpseclib (http://phpseclib.sourceforge.net/). Тем не менее я получаю "ошибку Дешифрования в C: \ XAMPP \ HTDOCS \ Crypt \ RSA.php на линии 2103", который эта часть:C# encrypt PHP decrypt using RSA
if ($lHash != $lHash2) {
user_error('Decryption error', E_USER_NOTICE);
return false;
}
шифрование в C# я использовал эту кучу коды:
RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider(dwKeySize);
rsaCryptoServiceProvider.FromXmlString(publickey);
int keySize = dwKeySize/8;
byte[] bytes = Encoding.UTF32.GetBytes(inputString);
// The hash function in use by the .NET RSACryptoServiceProvider here is SHA1
// int maxLength = (keySize) - 2 - (2 * SHA1.Create().ComputeHash(rawBytes).Length);
int maxLength = keySize - 42;
int dataLength = bytes.Length;
int iterations = dataLength/maxLength;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= iterations; i++)
{
byte[] tempBytes = new byte[(dataLength - maxLength * i > maxLength) ? maxLength : dataLength - maxLength * i];
Buffer.BlockCopy(bytes, maxLength * i, tempBytes, 0, tempBytes.Length);
byte[] encryptedBytes = rsaCryptoServiceProvider.Encrypt(tempBytes, true);
// Be aware the RSACryptoServiceProvider reverses the order of encrypted bytes after encryption and before decryption.
// If you do not require compatibility with Microsoft Cryptographic API (CAPI) and/or other vendors.
// Comment out the next line and the corresponding one in the DecryptString function.
Array.Reverse(encryptedBytes);
// Why convert to base 64?
// Because it is the largest power-of-two base printable using only ASCII characters
stringBuilder.Append(Convert.ToBase64String(encryptedBytes));
}
string ciphertext = stringBuilder.ToString();
и мой основной код PHP в decrpyt:
$rsa->loadKeyfromXML($privatekey);
$ciphertext = file_get_contents('cipher.txt');
$ciphertext = base64_decode(strrev($ciphertext));
//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$plaintext = $rsa->decrypt($ciphertext);
Я попытался PKC1 также дал другую ошибку в Печерском/RSA.php
Да $ rsa-> loadKey() также работает, это не имеет никакого значения. для PKCS, поскольку я прокомментировал это, дает такую же ошибку, к сожалению – relativelyPrime
Вы пробовали это без 'strrev'? – neubert
yeap Я также пробовал с/out strrev и base64_decode. все еще давая ошибку на той же строке в RSA.php Также, когда я использую PKCS1, я получаю ошибку в строке: if (ord ($ em [0])! = 0 || ord ($ em [1])> 2) { user_error ('Ошибка дешифрования', E_USER_NOTICE); return false; } – relativelyPrime