¿Cómo encriptar las contraseñas en sistemas hechos en C# .Net?
HTML-код
- Опубликовано: 11 окт 2024
- #encriptación #csharp #contraseñas
En este video te explicare por que debes encriptar las contraseñas de tus usuarios en tus sistemas hechos en C# .Net y como puedes hacer una consulta a la base3 de datos para comprobar algo encriptado.
Si quieres apoyarme y darme para una cerveza puedes hacerlo por aquí: paypal.me/Hecto...
Tambien puedes via patreon: / powerhdeleon
Todos mis podcasts: • Podcast #1 - ¿Cuál es ...
Curso de MVC .Net: • Curso de MVC .Net C#| ...
Curso de MVC Api .Net: • Curso de MVC API .Net ...
Curso de facturación electrónica en c# .Net: • ¿Cómo convertir archiv...
Todos mis videos sobre facturación electrónica: • ¿Cómo convertir archiv...
La falta de respeto tanto a mí como a cualquier otra persona y el SPAM son razones de bloqueo en mi canal.
"Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for "fair use" for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use"
---------------------------------------------------------------------------------------------------------------
Sigueme en twitter ⇒ / powerhdeleon
Sigueme en facebook ⇒ / hdeleon666
Mi Sitio web ⇒ hdeleon.net
De verdad no sé cómo es que tú canal no tiene tantos seguidores, me has ayudado demasiado en muchos temas de programación, espero que crezcas mucho más y gracias por ayudarme en todas esas tareas. 🥺❤️
hace 5 años y era justo lo que necesitaba GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Excelentes todos los vídeos, lo digo por la simplicidad de las cosas, lo que se debe hacer siempre cifrar las claves, lo anexaré a un proyecto personal que hice pero por enfocarme en otras cosas no le puse cifrado a las claves, mil gracias gran pedagogo, vídeos cortos y al grano, gracias por conocerlo.
Gracias por compartir tu conocimiento Héctor! tu forma de enseñar vale oro! (Aunque yo no lo pague jejeje). Saludos, se te estima mucho aquí en Honduras.
Excelente tutorial, justo me pedían un método de encriptación en mí portafolio de titulo, me sirvió a la perfección y de gran ayuda este tutorial, gracias!!
Hace poco descubrí tu canal, y estoy devorando tu contenido. Muchas gracias por tu esfuerzo.
Impresionante!!!! Qué sencillo lo haces y muy interesante. Me ha servido muchísimo. Muchas gracias!!! Por cierto, lo de la gente que va a ir al infierno fue lo mejor, jaajjajajjajajajaja
Gracias! justo hoy iba a hacer eso en un trabajo y me ahorraste investigar! mil gracias! hazme un hijo XD
Excelente demostración, tienes facilidad para explicar el código. Lo que hace rato me tiene sin dormir es cómo proteger mi código. Ya que en internet hay montón de programas que permiten ver el código fuente y se pierde completamente la seguridad. No se si tienes un video sobre cómo proteger el código fuente, o compilarlo a binario o existe otra opción realmente funcional, la obfuscación me parece que no lo es. Saludos y felicitaciones.
Excelente amigo.... de haberlo visto hace varios meses no juera sufrido implementando MD5 cuando recien empezaba en ASP NET MVC ;)
Excelente tutorial, me sirvió demasiado para encriptar las contraseñas en mi proyecto de titulo, muchas gracias bro!!! eres un grande.
pd: tu manera de explicar es genial
tus videos son muy informativos y practicos amigo , te felicito por lo que le estas brindando a la comunidad de developers saludos desde Colombia.
¡Funcional y muchas gracias Ing. Héctor D' 🦁!
me encanta como explica tan bien saludos desde Bolivia ya me suscribí
Bro enserio que buenos videos haces, fáciles de entender!!
Eres el mejor Bro. Gracias por compartir estos videos tan geniales!
Gracias maestro, este video me ayudo mucho con mi inicio en la seguridad informática!
Eres un grande.
Que buen video, excelente explicación muy fácil de entender y entretenida
Gracias! Muy bien explicado ahora lo implementaré en MVC
Muchas gracias maestro!
Genial amigo muy buenos vídeos la verdad. Son muy útiles los temas que tratas siempre!
Que buen video!!! muchísimas gracias por la ayuda
Eres un Saiyan de la programación y muy divertidos tus vídeos 😉. Se que lo lograrás.
gracias!
TODO UN CRACK!!
8:25 que qlon andaba viendo el tuto Uwu, jajaj buen vídeo gracias
Eres la verga we, aprendo, me divierto y me tomo una cheve mientras miro tus videos, niceeeee saludos bro.
excelente, eres todo un crack, gracias por el video bro :)
Excelente. gracias
dónde es mejor encriptar, directo en la base de datos y ahorrar lineas de código o hacerlo de la manera que está en el video?
Gracias por tus videos ! son muy buenos
Gracias por tomar en cuenta mi sugerencia de ayer bro
Buen Ejemplo, pero ahora en Visual Studio 2022 y .net 6, Este metodo de encriptacion lo marca como Obsoleto "'SHA256Managed' is obsolete: 'Derived cryptographic types are obsolete. Use the Create method on the base type instead."... Habra una solución para éste Warning?
Me gusta como explicas te entendí super bien :3
Interesante video,sobre todo tu segundo Pass,hector sabes que si se guarda la conexion en el app.config personas no autorizadas podran leer la contraseña del servidor puedes enseñarnos como ocultar o colocarles caracteres tales como(*) que impidan la lectura del pass en el app.config? saludos y gracias
Mejor explicado de ahí se daña ⭐
Genial!!! muy buen tutorial, pero ¿como hago para desencryptar el pass al momento que el usuario quiera recuperarlo?
Que vuelva a poner nueva
@@hdeleonnet ha ok, gracias :D
Al usuario que le den jaja
@@dannyxicay1041 Despues de este video estuve viendo mas opciones y encontre esto, quizas es lo que buscas, añadi tambien el de hector, espero te sirva
public static class Encriptacion
{
public static string EncriptarUnaVia(string str)
{
SHA1 sha1 = SHA1.Create();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] stream = null;
StringBuilder sb = new StringBuilder();
stream = sha1.ComputeHash(encoding.GetBytes(str));
for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
return sb.ToString();
}
public static string Encriptar(this string _cadenaAencriptar)
{
string result = string.Empty;
byte[] encryted = System.Text.Encoding.Unicode.GetBytes(_cadenaAencriptar);
result = Convert.ToBase64String(encryted);
return result;
}
public static string DesEncriptar(this string _cadenaAdesencriptar)
{
string result = string.Empty;
byte[] decryted = Convert.FromBase64String(_cadenaAdesencriptar);
//result = System.Text.Encoding.Unicode.GetString(decryted, 0, decryted.ToArray().Length);
result = System.Text.Encoding.Unicode.GetString(decryted);
return result;
}
Hola, excelente video. Tengo una duda referente a EF. En la creación del modelo de la DB hay un punto donde se te pide Si mostrar información del password y No mostrar información del password en la cual seleccionaste que sí. Lo cual entiendo que en el archivo web.config se almacenará tal cual es password de tu conexión a DB. Esto es una mala práctica de seguridad por lo que me gustaría saber si existe alguna solución para no almacenar el password en el web.config y la aplicación pueda conectarse a la base de datos si previamente ya testeamos el EF
Excelente video, esta muy claro, muchas gracias, tengo una duda, ¿De qué forma puedo saber como están encriptados los datos en sql server? por ejemplo estoy trabajando con un login, entonces las contraseñas están encriptadas, por lo que cuando realizo una consulta, sale en el campo de contraseña puros valores encriptados, pero me di cuenta que al lado de la contraseña aparece un campo que solo tiene números al azar que constan de 6 caracteres, entonces estoy pensando que esos número tienen algo que ver con el campo de la contraseña encriptada
Sé que es un video de hace rato, pero podrias hacer un video explicándo el algoritmo de encriptacion o si ya tienes uno podrias facilitar el nombre.
esto es lo q buscaba tiempo atras!! y hasta hoy me llega gracias hombre , eres la joya , listo un duro golpe a la NSA con la privacidad en passwords jajajajajaja , una pregunta... en caso de usar ese metodo para encriptar, y yo necesite loguear en una web , al enviar el dato a la web es posible enviarlo sin encriptar ya que si lo envia encriptado no funcionara, la encriptacion en mi caso es para q sea seguro el guardado de la info en la pc
MANDALO PELON CON UN CERTIFICADO SSL
@@hdeleonnet ah perfecto, listo ps.... Pero.?? Comose hace eso?? Jajaja ni idea mensiina esto cuando sea prudente y idsculpa mi ignorancia atento a tys videos
cuando mandas tus datos del formulario al backend este dato no va encriptado, este dato se encripta en backend, lo que me referia que como va pelon cualquiera que ve tu red veria la contraseña pero si le pones al sitio en producción un ssl ya se encripta y no se ve lo que envian
@@hdeleonnet perfecto, me disculpo no me explique bien, era una app de escritorio q guarda contraseñas por ejemplo de correo y la guardo en settings , obviamente se ven en el archivo settings, al usarla (selenium nuget) por ser de correo, encriptada no servira por eso debo desencriptarla antes
usa access token
Disculpen la ignorancia, pero si un usuario se va a crear con un contraseña encriptada y se va comparar con una contraseña encriptada, como puedo saber cual es su contraseña realmente cuando quiera recuperar su contraseña? de ante mano muchas gracias y que mas puedo decirte Sr. Hector de León, solo muchas gracias por conocimiento tan valioso.
ruclips.net/video/FXShR_rBLmQ/видео.html
@@hdeleonnet Muchas gracias!!
Excellent ty
Que genial este video, solo que tengo un problema al momento de implementarlo a mi proyecto. La parte de encriptacion me va genial, inserto usuario mediante PA en sql y me encripta la contraseña de lujo, el problema es cuando quiero logearme con la contraseña encriptada no me realiza bien la comparacion :( Y tambien no utilice entity sino mas bien sql command algo asi :
Comando.CommandText = "select * from TblUsuario where strUsuario=@usuario and strContraseña=@pass";
Donde @pass es una variable declarada que toma como referencia el dato ingresado en el textbox por el usuario asi:
Comando.Parameters.AddWithValue("@pass", ePass);
Y este encriptado segun tu video asi: string ePass = Encrypt.GETSHA256(pContraseña);
pContraseña es la variable que captura el campo del textbox
hola Hdeleon si quiero encriptar la conexion de la base de datos como aplico esta api
pero y si quiero ingresar un usuario desde sql, como hago que al insertar el usuario por sql también me salga la contraseña encriptada? Has un video de eso porfa
una pregunta no hay una forma de que sea única esa encriptación lo que pasa es que si la contraseña es igual digamos en dos usuarios pues la encriptacion es igual en si que tan seguro es eso.
Las contraseñas se asocian a un usuario por eso al loguearte se hace con usuario y contraseña y eso siempre te va devolver un único registro
Gracias 🇺🇾🇺🇾🔝🙋
Hola me puedes ayudar con algo, veo que al realizar la conexión a la BD utilizas entity framework, estuve viendo otros vídeos donde para realizar la conexión a la BD utilizaban una cadena de conexión donde se dejaba servidor, usuario y pass, apenas estoy aprendiendo y haciéndolo de esa forma aunque funciona, creo que no es la mejor práctica, hay alguna posibilidad de hacerlo de esa forma y cifrar o encriptar esos datos? Muchas gracias por todo el apoyo
Te recomiendo este video ruclips.net/video/LO8DCduDjjk/видео.html
Ahi explico como conectarte de maneras diferentes
@@hdeleonnet muchísimas gracias, ya vi todo el video y detallaste muy bien las 3 formas de la conexión, me surge una consulta, en la primer forma dejas los datos usuario y contraseña dentro del código, en el minuto 11.53 en la segunda forma le das si, y lo mismo haces en la tercer forma, mi pregunta es la siguiente, al final cuando se compila y entrega el exe, las personas van a tener la posibilidad de ver esa información? Lo digo es porque deoronto para alguien básico esto no puede ser útil, pero alguien que tenga un poco más de conocimiento puede hacer algún daño en la BD, espero sea claro lo que trato de preguntar, nuevamente muchas gracias por tú tiempo y eres la persona que tiene un conocimiento muy amplio del tema y por eso te consulto
muchas gracias por el vídeo,una pregunta, estoy haciendo un proyecto y estoy buscando la manera de encriptar los procedimientos almacenados para proteger mi código (casi toda la lógica esta en la BD) que método de encriptacion me recomiendas?, yo creo que debe ser doble camino, pues al momento de modificar un SP necesito desencriptar...Ayuda please
si es sql server, sql server tiene encriptacion de base de datos
Video de logueo con fb en mvc porfa
hola. una consulta por favor. si un programador puede ver el codigo de otro sistema, puede acceder a la clave de encriptacion?
Si, hay decrypters de compilaciones, ahora si la conexion no utiliza un metodo de seguridad esta al exponerse en internet alguien puede interceptar los paquetes y desencriptarlos, por ejemplo en este mismo video el hash generado puede revertir y exponer cualquier contraseña por mas q el usuario haya puesto enfasis en la complejidad de la pwd. Ningun metodo es 100% fiable, por esta razon las grandes compañiasoptan por el 2AF
Hola Héctor, buen vídeo
Tengo una pequeña inquietud
¿Como podría desencriptar la contraseña, para luego compararla?
Gracias
No se desencripta, encripta lo que vas a comparar, lo de la base de datos no se puede desencriptar.
Muy util el video like, excelente, pero trata de equilibrar mejor el audio, se sube y se baja demasiado
🤘
Hola Hector... se puede desencriptar nuestros proyectos exe de windowsform y asi poder nos lo pueden piratear con todo y esta metodologia de seguridad de password que planteas en este video ???
Como desencriptar? Mas bien descompilar?
@@hdeleonnet Exactamente Hector eso quice decir..., disculpa mi ignorancia pero soy principiante. SI quice decir que si descompilan mi proyecto exe entonces tambien podrian saver el password que explicas en este video. Es asi o me equivoco? Gracias y te felicito por tu canal que apenas lo acabo de conocer. Saludos
em no, por que cuando encriptas de esta manera es de solo 1 camino, no se puede desencriptar
Excelente video... Podrias ayudarme haciendolo para MYSQL server por favor??? Muchas gracias...
ruclips.net/video/D7UPAWFg2lk/видео.html
¿Es aconsejable también encriptar el email o con sólo la contraseña está bien??
Solo contraseña
do you have an similar example using encryption and decryption of file using PGP Kleopatra ?
Hola Hector
una pregunta y si quiero enviar la contraseña por correo electronico como hago para desencriptarla
Buscar algotitmo de 2 caminos
Muchas gracias Héctor una pregunta en tu bloc hay algún ejemplo de esos algoritmos
A mi me esta dando un error.. El cuál es el siguiente: cuando le doy seguiento en el programa para ver si me esta mandando la clave encriptada me muestra la cade de texto completo.. Ósea la clave incriptada, pero cuando voy a la base de datos y reviso el registro solo me guarda algunos caracteres de la cadena y por ende cuando intento lograrme no me deja..
Si alguien me puede decir como solucionarlo se los agradecería y si no logran comprender bien me dicen asi trato de explicarlo mejor
Fácil compañero, no se si resolviste la duda, por ejemplo tú cuando insertas el dato a la BBDD le colocas el largo que quieres que sea la cadena, yo por ejemplo le tenía contraseña Varchar2(40) ya que me piden enlazado a oracle y consultas mediante procedimientos. entonces la cadena que ingresa este va a tomar los primeros 40 dígitos a letras y el resto los eliminará. Por ende debes alargar el largo de la variable a Varchar2(200) por ejemplo y es ahí cuando te tomará todo el largo. Yo en este caso me excedi bastante y le puse de largo 1000 jajajja.. saludos!
amigo no seguiste con la facturacion Electronica DIAN Colombia ?
me informaron los del dian que va cambiar, espero el cambio de parte de ellos
@@hdeleonnet y que has sabido de los cambios amigo yo he visto. Los materiales de apoyo esos que estan no serán ya los actuales ?
me dijeron que iba haber mas cambios
Esta de lujo me funciono en MVC, solo un unico problema cuando use validaciones de DataAnotations vi que una linea causa conflicto y es la de validar que la contraseña ingresada valla con una Mayuscula, minuscula,numero y caracte especial hay es donde causa conflicto no se podria alterar el algoritmo para que funcione es esta linea del dataanotation
[RegularExpression("^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])).{8,}$", ErrorMessage = "Las contraseñas deben tener al menos 8 caracteres y contener minimamente 1 de los siguientes: mayúsculas(A - Z), minúsculas(a - z), números(0 - 9) y un carácter especial(por ejemplo, @ # $% ^ & *!)")]
Que error marca? Debes encriptar posterior a la validación
@@hdeleonnet error de tipo creo que porque hace la encriptación en el mismo momento que se ingresa la contraseña antes de la validación y por eso da error ya que la encriptación la da aveces todo en minúscula y por eso da error ya que el dataanotations pide una mayúscula seguí los pasos como está en el vídeo como podría solucionarlo del vídeo
que encriptes despues de validar
@@hdeleonnet ya te entendi pero no encuentro la forma de hacerlo para agregar el usuario y la encriptacion hago esto ya que si quito la validación con dataanotations si lo ingresa correctamente
Username.password = ShadowMan.GetSHA256(model.password);
DB.usuario.Add(Username);
DB.SaveChanges();
y esto es lo que tengo en usuario.cs
[RegularExpression("^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])).{8,}$", ErrorMessage = "Las contraseñas deben tener al menos 8 caracteres y contener minimamente 1 de los siguientes: mayúsculas(A - Z), minúsculas(a - z), números(0 - 9) y un carácter especial(por ejemplo, @ # $% ^ & *!)")]
[Display(Name = "Password")]
public string password { get; set; }
encripta cuando guardes en la bd
¿Cómo revertirlo? En caso de que tenga que ver la información que encripté por ejemplo cuando voy a reestablecer la contraseña..... ¿Existe algún método que pueda revertir el SHA256?
nop, sha256 es de un camino, para restablecer contraseña ruclips.net/video/FXShR_rBLmQ/видео.html
Muchas gracias Héctor! Tu info siempre es de ayuda!
4:42 no me aparece ADO.NET Entity Data Model, como lo instalo?
Como encriptar una contrasela que ya ha sido ingresada con su usuario
Hola Hector, he visto tu video de Encriptacion y esta genial, felizidades muy bien explicado. ahora como puedo implementarlo en mi controlador si tengo el siguiente codigo que me genero el Scaffolding del MVC.
public ActionResult Create([Bind(Include = "Id,paterno,materno,nombres,correo,password,estatus,IdRol")] Users users)
{
if (ModelState.IsValid)
{
db.Users.Add(users);
db.SaveChanges();
TempData["SuccessMessage"] = "Saved Succefuly";
return RedirectToAction("Index");
}
ViewBag.IdRol = new SelectList(db.Roles, "Id", "Rol", users.IdRol);
return View(users);
}
ya tengo agregada la clase Encrip.
Saludos.
Separa la clase que en cripta y la aplicas haciendo como yo.
Listo les comparto mi codigo por si alguien le sirve, ya pude encryptar de manera correcta con la funcion de Hector
public ActionResult Create([Bind(Include = "Id,paterno,materno,nombres,correo,password,estatus,IdRol")] Users model)
{
if (ModelState.IsValid)
{
Models.Users oUser = new Models.Users();
oUser.password = Encriptacion.GetSHA256(model.password);
Users emp = new Users();
//emp.Id = model.Id;
emp.paterno = model.paterno;
emp.materno = model.materno;
emp.nombres = model.nombres;
emp.correo = model.correo;
emp.password = oUser.password;
emp.estatus = model.estatus;
emp.IdRol = model.IdRol;
db.Users.Add(emp);
db.SaveChanges();
TempData["SuccessMessage"] = "Saved Succefuly";
return RedirectToAction("Index");
}
ViewBag.IdRol = new SelectList(db.Roles, "Id", "Rol", model.IdRol);
return View(model);
}
Perfectirijillo
haz un video de encryptacion de 2 caminos pleaseeee
Arre
@@hdeleonnet una pregunta me sale pero a mime sale el password encriptado pero con menos caracteres que el tuyo o sea a ti te sale encryptado con mas de 40 el mio creo que llega solo a los 25 es normal?
@@josepared7243 debe tener los mismos
como puedo encripta los mensaje de correo gmail...puede hacer un tutorial por favor
Hola NSA
Hola me gustaria saber si puedes hacer un video referente a validar contraseña, que sea igual a la de una base de datos ejemplo: si la contraseña es PepaCOSTA34 no vaya a permitir ingresar si la ingresa Asi: pecacosta34 y/o PEPACOSTA34 agradezco si lo puedes hacer para C#.
ruclips.net/video/xUvJhe7Nvgc/видео.html
Fácil creando un método para encriptar al gusto basado en el código ascci.
no entiendo...no deberias usar una palabra de encriptacion para desencriptar? como la desencriptas? gracias!
Hay encriptacion de 1 camino y de 2 caminos. El de 1 no hay vuelta atras
@@hdeleonnet y si encriptas algo y lo guardas...como recuperas lo encriptado? la verdad no entiendo bien
@@naiosoft un password lo comparas encriptando el nuevo y haciendo un ===, si quieres recuperarlo utiliza un doble camino
Topuelquelolea 😂😂😂
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace CalibradorApp.Helper
{
internal class Encrypt
{
public static string GetSHA256(string str)
{
SHA256 sHA256 = SHA256.Create();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] stream = null;
StringBuilder sb = new StringBuilder();
stream = sHA256.ComputeHash(Encoding.ASCII.GetBytes(str));
for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
return sb.ToString();
}
}
}