Мне нужно RSA sign
некоторых данных, используя комбинацию хешей MD5
и SHA1
. Я легко могу сделать это только для одного или другого, но наличие комбинации усложняет задачу. Это для сообщения certificate verify
в DTLS 1.0
, поэтому я не могу просто выбрать один, к сожалению.
Я считаю, что шаги должны состоять в том, чтобы хешировать в MD5
, а затем хэш в SHA1
и объединить. Тогда мне нужно зашифровать с закрытым ключом. Вот где я застрял.
У меня есть RSACryptoServiceProvider
, который имеет правильный закрытый ключ (он не экспортируется). Я знаю, что не могу сделать
rsa.SignHash(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
, потому что это не просто хэш SHA1, поэтому эта функция считает хеш недействительным, поскольку он составляет 36 байтов, а не 20 байтов, как ожидалось.
Я также знаю, что яне могу сделать
rsa.SignData(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
, потому что это снова будет хэшироваться.
Я считаю, что я ближе с
rsa.Encrypt(hash, RSAEncryptionPadding.Pkcs1);
, однако это использует открытый ключ вместо частногоключ, который мне нужен.
Есть предложения о том, как я могу либо зашифровать с помощью закрытого ключа, либо выполнить подпись с помощью MD5 + SHA1?