Я c # программист, но я новичок в PHP. вот мой вопрос: я пытаюсь портировать этот PHP метод шифрования:
public static function encryptPassword($password, $publicKeyId, $publicKey)
{
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(12);
$time = time();
openssl_public_encrypt($key, $encryptedAesKey, base64_decode($publicKey));
$encrypted = openssl_encrypt($password, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag, strval($time));
$payload = base64_encode("\x01" | pack('n', intval($publicKeyId)).$iv.pack('s', strlen($encryptedAesKey)).$encryptedAesKey.$tag.$encrypted);
return sprintf('#PWD:4:%s:%s', $time, $payload);
}
- Я использовал RNGCryptoServiceProvider для генерации случайных байтов (для $ key & $ iv ).
- Я использовал следующий C# код для openssl_public_encrypt () . Это правильно?
byte[] ThePublicKey_Bytes = Convert.FromBase64String(ThePublicKey);
X509Certificate2 cert = new X509Certificate2();
cert.Import(ThePublicKey_Bytes);
RSACryptoServiceProvider TheRsaService = (RSACryptoServiceProvider)cert.PublicKey.Key;
byte[] encryptedAesKey = TheRsaService.Encrypt(TheKey, false);
return encryptedAesKey;
Основная проблема -
метод openssl_encrypt () . Я исследовал это в течение 2 дней. Я не нашел C# эквивалента (или любой связанной информации) для аргументов 'OPENSSL_RAW_DATA' или 'tag'. что такое C# эквивалент для аргумента AAD (Дополнительные аутентифицированные данные или Дополнительные связанные данные)? Это NonSecretPayload?