J'ai un exemple de code en Java que j'essaie de convertir en plate-forme .NET C#. Ce code crypte une chaîne et y ajoute une signature. Le code Java utilisant le fournisseur BouncyCastle et le code pour l'ajout de la signature sont les suivants..NET et Java produisant une signature différente
InputStream in = new FileInputStream(derkeyfilename);
byte[] privKeyBytes = new byte[in.available()];
in.read(privKeyBytes);
KeyFactory rsaKeyFac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(privKeyBytes);
private RSAPrivateKey myPrivateKey = (RSAPrivateKey) rsaKeyFac.generatePrivate(encodedKeySpec);
MessageDigest md = MessageDigest.getInstance("MD5", "BC");
byte[] digest = md.digest(msg);
Signature sig = Signature.getInstance("MD5withRSA", "BC");
sig.initSign(myPrivateKey);
sig.update(digest);
byte[] signature = sig.sign();
byte[] base64 = Base64.encodeBase64(signature);
String signature = new String(base64);
Quelqu'un peut-il m'aider à convertir ceci en C#. J'ai essayé quelques samples (BouncyCastle pour C#, openssl etc) et tous retournent la même signature qui est différente de ce que java produit. Une autre chose que j'ai trouvée est que java utilise la clé privée .der qui n'est pas supportée en C# (pour autant que je sache). J'utilise la clé .pem pour le même certificat.
Votre façon de lire à partir d'un InputStream est cassée pour commencer. Personnellement, je ne fais jamais confiance à 'available()' et vous ne devriez jamais lire à partir d'un flux et ignorer la valeur de retour de 'read'. Avez-vous vérifié si les résumés sont les mêmes? Comment obtenez-vous les octets de la chaîne pour commencer? Un exemple court mais * complet * serait vraiment utile - y compris ce que vous avez essayé en C#. Si plusieurs approches .NET donnent la même signature, c'est probablement la bonne ... –
De plus, vous fournissez * seulement * le 'Signature' avec le résumé MD5 ... ne devriez-vous pas le fournir avec l'entrée données ('msg')? –
@Jon digests sont toujours signés, pas les données complètes. –