Hablar de MD5

Reimpreso de: http://www.weixuehao.com/archives/474

Que es MD5

algoritmo de resumen de mensajes 5 (algoritmo de resumen de mensajes). El "cifrado MD5" que se suele decir es el → algoritmo de resumen de información.

Al descargar algo, a menudo veo el valor md5 en algunas propiedades de paquetes comprimidos. Y en esta página de descarga, es muy probable que en un lugar determinado, se escribió una frase, el valor MD5 de este archivo sea XXXXXXXXX. ¿Qué hace esto?

Vernáculo Vernáculo: md5 es en realidad un algoritmo chino. Puede convertir una cadena de caracteres, un archivo o un paquete comprimido y ejecutar md5 para generar una cadena de 128 bits de longitud fija. Esta cadena es básicamente única.

Por lo tanto, después de que alguien haya reparado el paquete comprimido, se generará una nueva cadena. En este momento, la cadena proporcionada por el sitio web se puede comparar con la cadena recién generada. Si es diferente, significa que se ha reparado.

El cifrado y el resumen no son lo mismo

El mensaje cifrado está completo, tiene un algoritmo de descifrado para obtener los datos originales;

La información obtenida por el resumen es incompleta, a través de los datos de resumen no se pueden obtener los datos originales;

Entonces, cuando vea que mucha gente dice, md5, cifrado, descifrado, simplemente sonríe.


Longitud MD5

Algunas personas dicen md5, 128 bits, 32 bits, 16 bits, ¿cuánto mide md5?

La longitud de md5, la predeterminada es de 128 bits, que es una cadena binaria de 128 0 y 1.

Esa expresión es muy antipática.

Entonces, el binario se convierte en hexadecimal, y cada 4 bits representa un hexadecimal.

Entonces 128/4 = 32 se convierte a representación hexadecimal, se convierte en 32 bits.


¿Por qué todavía hay un md5 de 16 bits en Internet?

Hay muchas publicaciones en Internet, la diferencia entre el cifrado md5 de 32 bits y el de 16 bits.

Observe cuidadosamente los valores md5 de 32 bits y 16 bits generados por admin ...

查询结果:

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

md5(admin,16) = 7a57a5a743894a0e

¡Míralo!

De hecho, la longitud de 16 bits proviene del valor md5 de 32 bits. Se obtiene eliminando los primeros ocho bits del md5 de 32 bits y los últimos ocho bits.

El papel de MD5

①Prueba de coherencia, el mejor ejemplo

②La firma digital sigue siendo el mejor ejemplo. Acabo de ver una huella digital en md5 y presioné una huella digital para mostrar que es única.

③ Autenticación de acceso seguro, este es el problema del diseño habitual del sistema.

Cuando el usuario se registra, la contraseña será encriptada md5 y almacenada en la base de datos. Esto puede evitar que quienes pueden ver los datos de la base de datos realicen operaciones maliciosas.

¿No se puede romper md5?

md5 es irreversible, es decir, no existe un algoritmo correspondiente y los datos originales se obtienen del valor de md5 producido a la inversa.

Pero si se usa la fuerza bruta, es otra cuestión.

 

¿Es md5 único?

¿Es factible md5 como clave principal en la base de datos? Esto implica una pregunta, ¿el valor md5 es único? La respuesta no es única.

Es decir, un dato sin procesar, correspondiente a un solo valor md5;

Pero un valor md5 puede corresponder a varios datos sin procesar.

Generar valor MD5 en java

public class MD5Test {
 
    //main测试类
    public static void main(String[] args) {
        String result = getMD5("aaa");
        System.err.println(result);
    }
 
    /**
     * 生成md5
     * @param message
     * @return
     */
    public static String getMD5(String message) {
        String md5str = "";
        try {
            //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
            MessageDigest md = MessageDigest.getInstance("MD5");
 
            //2 将消息变成byte数组
            byte[] input = message.getBytes();
 
            //3 计算后获得字节数组,这就是那128位了
            byte[] buff = md.digest(input);
 
            //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
            md5str = bytesToHex(buff);
 
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5str;
    }
 
    /**
     * 二进制转十六进制
     * @param bytes
     * @return
     */
    public static String bytesToHex(byte[] bytes) {
        StringBuffer md5str = new StringBuffer();
        //把数组每一字节换成16进制连成md5字符串
        int digital;
        for (int i = 0; i < bytes.length; i++) {
             digital = bytes[i];
 
            if(digital < 0) {
                digital += 256;
            }
            if(digital < 16){
                md5str.append("0");
            }
            md5str.append(Integer.toHexString(digital));
        }
        return md5str.toString().toUpperCase();
    }
}


El algoritmo detallado de MD5 ... búsquelo usted mismo.
==================== Línea divisoria ========================

Lo anterior se transfiere del tutorial MD5 de wei, permítanme hablar sobre mis escenarios de uso en el proyecto.

md5 se usa generalmente durante el inicio de sesión y el registro. Al registrarse, la contraseña se cifra md5 y la contraseña cifrada se almacena en la base de datos del servidor. De esta manera, cada vez que el cliente inicia sesión, la contraseña md5 en texto plano se cifra con el servidor. A modo de comparación, el inicio de sesión es exitoso si el mismo es el mismo, y el inicio de sesión falla si la diferencia es diferente, de modo que incluso si se filtra la base de datos del servidor, otros no conocerán la contraseña del usuario.

Pregúnteme que la contraseña md5 está encriptada y guardada en el teléfono, y luego la contraseña se completa automáticamente, pero también es posible que el usuario modifique la contraseña por sí mismo. ¿Cómo puedo juzgar si el contenido en el cuadro de contraseña debe ser md5 otra vez?


Supongo que te gusta

Origin blog.csdn.net/u012049463/article/details/50783861
Recomendado
Clasificación