Clase de mensajería
La clase MessageDigest proporciona a las aplicaciones la funcionalidad de los algoritmos de resumen de información, como los algoritmos MD5 o SHA. El Digest de la información es una función hash unidireccional que recibe datos de cualquier tamaño y genera un valor hash de longitud fija.
El objeto Messagedigest comienza a inicializarse. Este objeto procesa los datos utilizando el método Update (). Puede llamar al método RESET () en cualquier momento para restablecer el resumen. Una vez que se han actualizado todos los datos que deben actualizarse, se debe llamar a uno de los métodos Digest () para completar el cálculo hash.
El método Digest solo se puede llamar una vez para una cantidad dada de datos de actualización. Después de que se llama el resumen, el objeto Messagedigest se restablece a su estado inicial.
ilustrar:
En el sitio web, para proteger la información de privacidad, como el nombre de usuario y la contraseña del miembro del sitio web, la encriptamos directamente en MD5 u otras maneras al registrarnos. Incluso el administrador de la base de datos no puede ver la contraseña del miembro y otra información. El efecto de contraseña en la base de datos es tal: 8E830882F03B2CB84D1A657F346DD41A Efecto.
Debido a que el algoritmo MD5 es irreversible, muchos sitios web lo usan ampliamente.
Tres métodos de cifrado comúnmente utilizados
Método 1: Use los operadores de bits para convertir los datos cifrados en hexadecimal Método 2: Use el método de formato para convertir los datos cifrados en hexadecimal (recomendado)
Método 3: Use el algoritmo para convertir los datos encriptados en hexadecimal
import java.security.messageGest; import java.security.nosuchalgorithmexception;/*** Use la clase MessageDigest que viene con java* @author xiaokui*/public class cifradoUtil {/*** desde que md5 y sha-1 se desarrolló a partir de MD4, sus características y características de la fuerza tienen muchas similares de la clase* la mayor parte de la clase* la mayor diferencia de sha-1 y el md5 y el sha-1 desarrollado a partir de MD4, sus características de estructura y fuerza tienen muchas similares de la clase* la mayor diferencia de la clase* la mayor parte de los md5 y el md5 y el sha y el sha y el sha y la mayor parte de la estructura y las características de la estructura y las características de la fuerza de la clase. Su resumen es 32 bits más largo que el Digest MD5 (1 byte = 8 bits, equivalente a 4 bytes de largo, 8 caracteres más que MD5 después de la conversión a hexadecimal). * Para ataques forzados, MD5 es una operación del orden de 2128 y SHA-1 es una operación del orden de 2160. * La dificultad para dos mensajes con el mismo resumen: MD5 es una operación de 264 es una operación de orden de magnitud, y Sha-1 es una operación de orden de 280 es una operación de orden de magnitud. * Por lo tanto, SHA-1 es más poderoso contra los ataques forzados. Sin embargo, debido a que SHA-1 tiene más pasos de ciclo que MD5 (80:64) y el caché a procesar es más grande (160 bits: 128 bits), SHA-1 funciona lentamente que MD5. * * @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; intente {MessageDigest md = MessageDigest.getInstance (Hashtype); md.update (fuente.getByTes (); // mediante el procesamiento de datos utilizando el método de actualización, la matriz de byte especificada se actualiza para actualizar la digest byte [] en el septstR. md.digest (); // obtenga el texto cifrado para completar el cálculo hash y producir un entero de 128 bits largo char str [] = nuevo char [16 * 2]; // Cada byte en caracteres hexadecimales byte byte0 = encryptStr [i]; // tome el byte str [k ++] = hexDigits [byte0 >>> 4 & 0xf]; // tome la conversión numérica de los 4 bits superiores en byte, >>> para el desplazamiento lógico derecho, desplazan los bits de símbolos correctamente str [k ++] = hexdigits hexdigits [byte 0xf]; // tome la conversión numérica de los 4 bits inferiores en byte} return new String (str); // Convertir el resultado después de la conversión a una cadena} Catch (nosuchalgorithMexception e) {E.PrintStackTrace ();} return;}/** @param String String que debe estar encriptado* @param hashtyPeCypEntion (md5) @return */public static string gethash2 (fuente de cadena, string hashtype) {stringBuilder sb = new StringBuilder (); MessageDigest MD5; intente {md5 = MessageDigest.getInStance (Hashtype); md5.Update (fuente.getByTes ()); for (byte b: md5.digest ()) {sb.append (string.format ("%02x", b)); // decimal a hexadecimal, x significa salida en hexadecimal, 02 indica que hay menos de dos dígitos antes de que la salida sea 0} return sb.ToString ();} Catch (nosuchalgorithmexception e) {E.PRESTSTSTA @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash3(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringBuilder sb = new StringBuilder (); MessageDigest md5; try {md5 = messageDigest.getInstance (Hashtype); md5.UpDate (fuente.getBytes (); byte [] encryptStr = mD5. 0; (NosuchalgorithMexception e) {E.PrintStackTrace ();} return null;} public static void main (string [] args) {system.out.println (gethash ("xiaokui", "md5")); system.out.println (gethash ("xiaokui", "sha")) "/n");system.out.println(gethash2("xiaokui", "md5")); system.out.println (gethash2 ("xiaokui", "sha") + "/n") ;System.Println(gethash3( siento", "Md5")); system.out.println (gethash3 ("xiaokui", "sha") + "/n");}}Resultado de salida
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E830882F03B2CB84D1A657F3466DDDD41A 0ba5512371d00c86e91712f44aab713898745f91 8e830882f03b2cb84d1a657f346dd41a 0ba5512371d00c86e91712f44aab713898745f9111
Encontramos que los tres métodos realizaron el mismo efecto, y la longitud de SHA es de 8 caracteres (32 bits) más que MD5.
Resumir
Lo anterior es todo el contenido de este artículo sobre el ejemplo de código de la clase de cifrado MessageGest que viene con Java. Espero que sea útil para todos. Si hay alguna deficiencia, deje un mensaje para señalarlo.