Я надеялся, что мне здесь помогут, и я наконец смогу решить эту неприятную проблему.
На стороне java они подписывают следующий код:
public static void main(String[] args) throws Exception {
if (args.length < 2)
printInfoAndExit();
String cmd = args[0];
Security.addProvider(new BouncyCastleProvider());
Signature signature = Signature.getInstance("SHA1withRSA", "BC");
if ("sign".equalsIgnoreCase(cmd)) {
String pemFileName = args[1];
String dataFileName = args[2];
byte[] data = readFile(dataFileName);
FileReader fr = new FileReader(new File(pemFileName));
PEMReader pemReader = new PEMReader(fr);
KeyPair keyPair = (KeyPair) pemReader.readObject();
fr.close();
signature.initSign(keyPair.getPrivate());
signature.update(data);
byte[] signatureBytes = signature.sign();
writeFile(signatureBytes, dataFileName + ".signed");
String encoded = Base64.encode(signatureBytes);
writeFile(encoded.getBytes(), dataFileName + ".signed.base64");
} else {
printInfoAndExit();
}
}
Когда я получаю данные, у меня есть их открытый ключ, и я пытаюсь проверить их с помощью следующего кода C #:
public static bool Verify(String msg, String signature, String publicKey)
{
RsaKeyParameters remotepubkey = GetRsaPublicKey(publicKey);
ISigner signer = SignerUtilities.GetSigner("SHA1withRSA");
signer.Init(false, remotepubkey);
byte[] sigBytes = Convert.FromBase64String(signature);
byte[] msgBytes = Encoding.Default.GetBytes(msg);
signer.BlockUpdate(msgBytes, 0, msgBytes.Length);
return signer.VerifySignature(sigBytes);
}
Это не работает !! Однако я могу проверить данные с помощью openssl:
openssl dgst -sha1 -verify public_key.pem -signature data.txt.signed data.txt
Вопрос в том, что мне не хватает, чтобы заставить эту работу?
ПРИМЕЧАНИЕ: У меня нет проблем с ключами, которые работают правильно, но каким-то образом есть разница между тем, как java и .net работают с RSA?
** Редактировать 1: ** В этом конкретном сценарии все, что мне нужно было сделать, это изменить GetSigner на
ISigner signer = SignerUtilities.GetSigner("RSA");
Может кто-нибудь сказать мне разницу между SHA1 с RSA и RSA?