Cómo descifrar SHA-256 encrypted String?

Tengo una cadena que fue codificada usando el siguiente método, ¿hay alguna manera de decodificar esta cadena de nuevo a su valor original? Gracias.

public synchronized String encode(String password) throws NoSuchAlgorithmException, IOException { String encodedPassword = null; byte[] salt = base64ToByte(saltChars); MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.reset(); digest.update(salt); byte[] btPass = digest.digest(password.getBytes("UTF-8")); for (int i = 0; i < ITERATION_COUNT; i++) { digest.reset(); btPass = digest.digest(btPass); } encodedPassword = byteToBase64(btPass); return encodedPassword; } private byte[] base64ToByte(String str) throws IOException { BASE64Decoder decoder = new BASE64Decoder(); byte[] returnbyteArray = decoder.decodeBuffer(str); return returnbyteArray; } private String byteToBase64(byte[] bt) { BASE64Encoder endecoder = new BASE64Encoder(); String returnString = endecoder.encode(bt); return returnString; } 

SHA-256 es una función hash criptográfica (unidireccional) , por lo que no hay una forma directa de decodificarlo. El propósito completo de una función hash criptográfica es que no puede deshacerlo.

Una cosa que puedes hacer es una estrategia de fuerza bruta , donde adivinas qué fue hasheado, luego hash con la misma función y ve si coincide. A menos que los datos hash sean muy fáciles de adivinar, podría tomar un largo tiempo.

Es posible que encuentre interesante la pregunta ” Diferencia entre mezclar una contraseña y cifrarla “.

Cabe señalar que Sha256 no encripta los datos / contenido de su cadena, en su lugar genera un hash de tamaño fijo, usando su cadena de entrada como semilla.

Siendo este el caso, podría alimentar en el contenido de una enciclopedia, que sería easilly 100 mb de tamaño de texto, pero la cadena resultante aún sería de 256 bits de tamaño.

Es imposible que invierta el hash, para obtener esos 100mb de datos del hash de tamaño fijo, lo mejor que puede hacer es intentar adivinar / calcular los datos de inicialización, hash, y luego ver si el hash coincide con el hash. Estás tratando de romper.

Si pudieras invertir el hash, tendrías la mejor forma de compresión hasta la fecha.

Has hecho lo correcto al usar una sal alias SSHA.

¡SHA y SHA-2 (o SHA-256) por sí mismo sin una sal ya no se consideran seguros! Salar un hash SHA se llama SHA salado o SSHA.

A continuación se muestra un ejemplo simple de lo fácil que es eliminar hash SHA-1. Lo mismo se puede hacer por SHA-2 sin demasiado esfuerzo también.

Ingrese una contraseña en esta URL: http://www.xorbin.com/tools/sha1-hash-calculator Copie y pegue el hash en esta URL: http://www.hashkiller.co.uk/sha1-decrypter.aspx

Aquí hay una página que elimina hash SHA-2. La forma en que funcionan estas páginas es que alguien debe haber descifrado su contraseña antes, de lo contrario no la encontrará: md5hashing dot net / hashing / sha256

Aquí hay una página que dice tener listas completas de SHA-2 disponibles para descargar para una “donación” (no lo he probado todavía): crackstation dot net / buy-crackstation-wordlist-password-cracking-dictionary.htm

Aquí hay un buen artículo que explica por qué tiene que usar SSHA sobre SHA: crackstation dot net / hashing-security.htm

SHA * es una función hash. Crea una representación (hash) de los datos originales. Este hash nunca debe utilizarse para recrear los datos originales. Por lo tanto, no es encriptación. Más bien, la misma función hash se puede usar en 2 ubicaciones diferentes en los mismos datos originales para ver si se produce el mismo hash. Este método se usa comúnmente para la verificación de contraseñas.