Может ли RSACryptoServiceProvider (.NET RSA) использовать SHA256 для шифрования (без подписи) вместо SHA1?

Может ли RSACryptoServiceProvider (или любой другой шифровальщик RSA, доступный в .NET) при шифровании использовать SHA256 вместо SHA1?

SHA1, похоже, жестко запрограммирован, и его невозможно изменить. Например, RSACryptoServiceProvider. SignatureAlgorithm жестко запрограммирован для возврата «http://www.w3.org/2000/09/xmldsig#rsa-sha1".

Если нет способа заставить RSACryptoServiceProvider использовать SHA256, каковы альтернативы?


Обновление

Следующий код работает отлично, но я хотел бы изменить OAEPWithSHA1AndMGF1Padding на OAEPWithSHA256AndMGF1Padding. Что требуется на стороне C # для возможности шифрования с использованием SHA256, а не SHA1?

Шифрование выполняется на C # с использованием:

var parameters = new RSAParameters();
parameters.Exponent = new byte[] {0x01, 0x00, 0x01};
parameters.Modulus = new byte[] {0x9d, 0xc1, 0xcc, ...};
rsa.ImportParameters(parameters);

var cipherText = rsa.Encrypt(new byte[] { 0, 1, 2, 3 }, true);

Расшифровка выполняется на Java с использованием:

Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPWithSHA1AndMGF1Padding", "BC");
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] cipherText = ...;
byte[] plainText = cipher.doFinal(cipherText);
12
задан Jonathan Wright 26 February 2011 в 23:24
поделиться