public IHttpActionResult GetHashPorArchivo([FromBody] RequestHashArchivo request) { string sellodigital = String.Empty; byte[] bytesFirmados = null; try { byte[] ClavePrivada = Convert.FromBase64String(request.claveprivada); byte[] bArchivo = Convert.FromBase64String(request.archivo); SecureString lSecStr = new SecureString(); SHA256Managed sham = new SHA256Managed(); lSecStr.Clear(); foreach (char c in request.password.ToCharArray()) { lSecStr.AppendChar(c); } RSACryptoServiceProvider lrsa = OpenSSLKey.DecodeEncryptedPrivateKeyInfo(ClavePrivada, lSecStr); bytesFirmados = lrsa.SignData(bArchivo, sham); } catch (Exception ex) { sellodigital = "Clave privada incorrecta"; return(BadRequest(sellodigital)); } sellodigital = Convert.ToBase64String(bytesFirmados); return(Ok(sellodigital)); }
public static async Task <string> GetHashPorFiel(string rutaKey, string rutaArchivo, string Password) { string Resultado = String.Empty; byte[] datosArchivo = null; byte[] datosKey = null; using (FileStream cer = File.Open(rutaArchivo, FileMode.Open)) { datosArchivo = new byte[cer.Length]; cer.Read(datosArchivo, 0, datosArchivo.Length); } using (FileStream key = File.Open(rutaKey, FileMode.Open)) { datosKey = new byte[key.Length]; key.Read(datosKey, 0, datosKey.Length); } using (HttpClient Cliente = new HttpClient()) { Cliente.BaseAddress = new Uri(ConfigurationManager.AppSettings["RutaWebApi"]); RequestHashArchivo peticion = new RequestHashArchivo { archivo = Convert.ToBase64String(datosArchivo), claveprivada = Convert.ToBase64String(datosKey), password = Password }; string ruta = Cliente.BaseAddress + "ObtenerHash"; HttpResponseMessage request = await Cliente.PostAsync(ruta, new StringContent(JsonConvert.SerializeObject(peticion), Encoding.UTF8, "application/json")); if (!request.IsSuccessStatusCode) { string razon = await request.Content.ReadAsStringAsync(); Resultado = String.Format("{0} {1}", request.ReasonPhrase, razon); } else { Resultado = await request.Content.ReadAsStringAsync(); } } return(Resultado); }