Question

Je suis un module RSA crypte les données et passe à C #. C # doit décrypter en fonction de la clé publique (64 bit codé) et le jeton passé.

Je jeton, 64 bits clé publique codé, certains peuvent me aider avec l'échantillon pour commencer. Tout ce que je sais de la fin Java est, il utilise. J'ai le résultat de fin Java et le besoin d'écrire un analyseur en C # pour décrypter. Je reçois à la fois la clé publique et le jeton comme une valeur de chaîne.

    Cipher cipher = Cipher.getInstance(ALGORITHM); //Algorithm = "RSA"
    cipher.init(Cipher.DECRYPT_MODE, key);

Merci

Était-ce utile?

La solution

Pour commencer, vous aurez besoin de la touche private pour déchiffrer le message. Par « clé publique (64 bits codé) », je devine ce que vous avez vraiment est un certificat codé-64 de base, avec une ligne d'en-tête qui dit « ----- BEGIN CERTIFICATE ----- » et pied de page qui dit "----- END CERTIFICATE -----".

Si c'est exact, vous aurez besoin de trouver la clé privée. Ceci est parfois stocké dans un fichier de format PKCS # 12, avec un « p12" ou extension » .pfx ». Vous aurez besoin d'un mot de passe pour accéder à la clé privée si elle est stockée dans un tel fichier.

Sinon, OpenSSL et d'autres services publics utilisent des fichiers de clé privée qui peuvent être base 64 codé ou binaire. Celles-ci ont une variété d'extensions, et peuvent ou peuvent ne pas être protégé par mot de passe. Si le fichier que vous avez a une ligne d'en-tête de « ----- BEGIN RSA PRIVATE KEY ----- » ou « ----- BEGIN CLE PRIVEE ----- », qui est en fait la clé privée .

Enfin, Windows peut stocker des clés privées dans son magasin clé interne.

Lorsque vous clarifiez l'emplacement de la clé privée, s'il vous plaît mettre à jour votre question.


Si la clé privée est utilisé sur le côté Java, il est peut-être une tentative d'effectuer une signature numérique. Bien que tous plusieurs fournisseurs de Java j'ai testé produisent des résultats corrects quand (ab) utilisé de cette façon, si vous faites une signature, la classe Signature doit être utilisé. Le code C # doit utiliser un objet de signature à « vérifier » la signature ainsi.

Le cryptage est effectué avec la clé privée. Depuis le publique est publique, ne importe qui peut déchiffrer le message; à savoir, le message est pas confidentiel. Les clés publiques sont utilisées par les bénéficiaires pour vérifier les messages signés.

Autres conseils

Vérifiez ce code sur.

public static string Decrypt(string inputText)
      {
        RijndaelManaged rijndaelCipher = new RijndaelManaged();
        byte[] encryptedData = Convert.FromBase64String(inputText.Replace(" ","+"));
        PasswordDeriveBytes secretKey = new PasswordDeriveBytes(ENCRYPTION_KEY, SALT);

        using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
        {
          using (MemoryStream memoryStream = new MemoryStream(encryptedData))
          {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
            {
              byte[] plainText = new byte[encryptedData.Length];
              int decryptedCount = cryptoStream.Read(plainText, 0, plainText.Length);
              return Encoding.Unicode.GetString(plainText, 0, decryptedCount);
            }
          }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top