Pregunta

Tengo un módulo que RSA cifra los datos y pasa al C #. C # necesita para descifrarlo en base a la clave pública (64 bits codificado) y el pasado token.

He modo, 64 bits codificado de clave pública, puede ayuda a conseguir con la muestra para empezar. Todo lo que sé de un extremo Java está, se está utilizando. He conseguido el resultado final de Java y necesidad de escribir un analizador en C # para descifrar esto. Consigo tanto la clave pública y el token como un valor de cadena.

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

Gracias

¿Fue útil?

Solución

Para empezar, debes contar con la clave privada para descifrar el mensaje. Por "clave pública (64 bits codificados)", supongo que lo que realmente tenemos es un certificado Base-64-codificada, con una línea de cabecera que dice "----- BEGIN CERTIFICATE -----" y una pie de página que dice "----- END CERTIFICATE -----".

Si eso es correcto, tendrá que encontrar la clave privada. Esto se almacena a veces en un archivo de formato PKCS # 12, o con una extensión ".p12" " .pfx". Usted necesitará una contraseña para acceder a la clave privada si se almacena en un archivo de este tipo.

Alternativamente, OpenSSL y otros servicios públicos utilizan archivos de clave privada que se puede codificar-Base-64 o binario. Estos tienen una variedad de extensiones, y pueden o pueden no ser protegido por contraseña. Si el archivo que tiene tiene una línea de cabecera de "----- BEGIN RSA PRIVATE KEY -----" o "----- BEGIN PRIVATE KEY -----", que es en realidad la clave privada .

Por último, Windows puede almacenar las claves privadas en su almacén de claves interno.

Cuando a aclarar la ubicación de la clave privada, por favor, actualice su pregunta.


Si se utiliza la clave privada en el lado de Java, puede ser un intento de realizar una firma digital. Mientras que todos los varios proveedores de Java que he probado resultados correctos producen cuando (ab) que se utiliza de esta manera, si usted está haciendo una firma, la clase Signature se debe utilizar. El código C # debe utilizar un objeto de firma "verificar" la firma también.

La encriptación se realiza con la clave privada. Desde el público clave es pública, cualquier persona puede descifrar el mensaje; es decir, el mensaje no es confidencial. Las claves públicas son utilizados por los receptores para verificar mensajes firmados.

Otros consejos

Compruebe hacia fuera este código.

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);
            }
          }
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top