Como criptografar dados confidenciais no banco de dados com o MD5?

Insira a descrição da imagem aqui

1. O que é MD5?

Enciclopédia Baidu Resumo:
  Algoritmo de resumo de mensagens MD5 (em inglês: Algoritmo de resumo de mensagens MD5), uma função de hash criptográfico amplamente usada, pode produzir um valor de hash de 128 bits (16 bytes) (valor de hash), usar Garantir a transmissão de informações completa e consistente. O MD5 foi projetado pelo criptógrafo americano Ronald Linn Rivest e publicado em 1992 para substituir o algoritmo MD4. O procedimento deste algoritmo é regulado no padrão RFC 1321.

2. Por que o armazenamento criptografado é necessário?

Para castanha:
  primeiro "bilhete" da China para implementar sistema de proteção nível de segurança da informação desde - CSDN usuário website casos de vazamento de dados
  hackers na linha abrir um banco de dados de usuário do site de tecnologia desenvolvedor comunidade CSDN 21 Dezembro 2011 manhã. Incluindo mais de 6 milhões de contas de email registradas e senhas de texto sem formatação correspondentes.

什么是明文密码?

A seguir, algumas informações que eu gerei no mongoDB, você pode ver intuitivamente que a senha correspondente ao nome do usuário é diretamente identificável, ou seja, a senha aqui é a senha real inserida pelo usuário durante o processo de login. O armazenamento final no banco de dados não possui operações de criptografia. Em primeiro lugar, os dados armazenados em texto sem formatação podem ser intuitivamente identificados por usuários como DBA e engenheiros de back-end sob a premissa de que não há vazamento.Em segundo lugar, uma vez que ocorre um vazamento de dados, o resultado pode ser imaginado.
Senha de texto não criptografado
Insira a descrição da imagem aqui   Insira a descrição da imagem aqui

这是当时遭到曝光和外泄的明文注册邮箱账号和密码
Insira a descrição da imagem aqui

3. O que é criptografia MD5?

Chestnut: Essa senha está criptografada e armazenada.No
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui Insira a descrição da imagem aqui
momento, alguns amigos já podem pensar que, embora a senha pareça muito diferente da senha comum de "123456", ela parece estar em texto sem formatação e os usuários devem fazer login Use essas strings não relacionadas? Com essa pergunta, precisamos dar uma boa olhada em como o MD5 é criptografado.

4. Recursos de criptografia MD5

A criptografia MD5 usada aqui é uma criptografia funcional; portanto, o resultado da criptografia deve ser o mesmo todas as vezes, sem bits aleatórios.
Independentemente de o texto criptografado ser longo ou curto, é sempre uma cadeia mista de 32
bits.O MD5 não tem possibilidade de quebra de função inversa, o que significa que o MD5 não pode ser quebrado matematicamente (não pode ser quebrado reversamente)

Seis, implementação de código

O servidor recebe as informações de login do usuário, que foram obtidas e criptografadas através do Node.js.
Primeiro de tudo, o Node usa o MD5 para criptografar dados, sem fazer o download do módulo, você pode introduzir diretamente o módulo de criptografia.

	let crypot = require("crypto");             // 加密操作模块

Após a introdução do módulo, crie um hash e use update e digest para criptografar os dados

	let md5 = crypot.createHash("md5");
    let password = md5.update(pwdInit).digest("base64");
    // pwdInit 用户原始登录密码
    // password 加密后的MD5字符串

Portanto, a aplicação do MD5 para criptografar e armazenar dados aqui, na verdade, a lógica da superfície é muito simples, ou seja: quando um usuário se registra, a senha do usuário é criptografada pelo MD5 e a "senha" obtida por "pwdInit" é armazenada no banco de dados (por exemplo: 123456 => E10ADC3949BA59ABBE56E057F20F883E), para que a senha real do usuário não seja diretamente exposta. Então, quando um usuário efetua login, ele só precisa digitar sua senha original para efetuar login. A senha de login original será convertida em um formato de cadeia de 32 bits no servidor através do MD5 e, em seguida, localize as informações de nome de usuário correspondentes e compare Para as senhas criptografadas de cadeia de caracteres de 32 bits, se forem iguais, significa que o logon foi bem-sucedido. Até o momento, mesmo que esses dados criptografados vazem, os hackers não podem saber a senha real por trás do texto cifrado.

案例服务端代码:

	let express = require("express");
	let app = express();
	let crypot = require("crypto");             // 加密操作模块
	let db = require("./Mongo_DIY_modules")      // Mgo 自定义封装模块 
	// 登录页面
	app.use("/", express.static("./public"));
	// 登录路由
	app.get("/checklogin", (req, res) => {
	    let username = req.query.username;
	    let userpwd = req.query.userpwd;	
	    // 根据填写的姓名,去数据库寻找该文档/集合
	    // 如过用户名存在,则读取密码进行比对,判断登录成功或失败
	    db.find({
	        "dbName": "homeDB",                       // 数据库名
	        "collectionName": "loginMD5",           // 集合名
	        "json": {
	            "name":username                     // 查询条件
	        },                             
	        "callback": function(err, result) {     // 查询结果
	            if(result.length == 0){
	                res.send("用户名输入有误");
	            } else {
	                if(result[0].pwd === MD5(userpwd)){		// 比对加密后的32位字符串密码
	                    res.send(result[0].name + " 登录成功!")
	                } else {
	                    res.send("密码错误");
	                }
	            }
	        }
	    });
	});
	// 注册路由	(未作用户名同名判断)
	app.get("/regist", (req, res) => {
	    console.log(req.query);
	    db.insertOne("homeDB", "loginMD5", {
	        "name":req.query.username,
	        "pwd":MD5(req.query.userpwd)
	    }, (err, result) => res.send(result));
	});	
	// 运行服务器
	app.listen(3000);

	function MD5(pwd) {
	    let md5 = crypot.createHash("md5");
	    let password = md5.update(pwd).digest("base64");
    	return password;
    }

7. Descriptografia de MD5

As ferramentas gerais de craqueamento são o modo de dicionário. Encontre o código limpo listando o dicionário correspondente de um grande número de "senhas de texto não criptografado". Ou seja, por uma combinação exaustiva de caracteres, é criado um banco de dados de consulta correspondente em texto sem formatação e texto cifrado.

Qual é o caminho da combinação exaustiva de caracteres?
  Você pode ver o site comum de criptografia e descriptografia do MD5 on-line, como fazê-lo:
MD5加密:
Insira a descrição da imagem aqui Insira a descrição da imagem aqui Insira a descrição da imagem aqui Insira a descrição da imagem aqui
você pode ver que os dados criptografados podem ser criptografados em uma cadeia de 32 bits, independentemente do comprimento e da complexidade, e o resultado da criptografia deve ser sempre o mesmo (a criptografia MD5 é um tipo funcional Criptografia)

MD5解密:
Insira a descrição da imagem aqui Insira a descrição da imagem aqui
Insira a descrição da imagem aqui Insira a descrição da imagem aqui
Através da descriptografia de sites on-line, você pode descobrir que números comuns podem ser facilmente decifrados e combinações complexas de caracteres são difíceis de decifrar.

Portanto, a chamada descriptografia exaustiva é, na verdade, criar um banco de dados de consulta correspondente em texto cifrado em texto sem formatação. Os grandes dados são criptografados primeiro no texto cifrado correspondente e armazenados. Quando uma seqüência semelhante de texto cifrado MD5 aparece, ela é percorrida na biblioteca do dicionário. Encontre e encontre o mesmo texto cifrado, e o texto simples correspondente é encontrado naturalmente. Esse processo de descriptografia é descriptografia exaustiva.

这是某个在线MD5揭秘网的解密范围
Forma de combinação:
Insira a descrição da imagem aqui
tipo de texto cifrado:
Insira a descrição da imagem aqui
pode-se dizer que o intervalo de descriptografia do site de descriptografia para MD5 ainda é muito alto. Portanto, geralmente é melhor não usar apenas uma camada de criptografia ao usar a criptografia MD5.Você pode usar o MD5 para criptografar várias camadas de texto sem formatação e adicionar outros caracteres para obter um alto grau de efeito de quebra. Por exemplo:

	let crypot = require("crypto");
	// 这是MD5加密的封装方法
	function MD5(pwd) {
	    let md5 = crypot.createHash("md5");
	    let password = md5.update(pwd).digest("base64");	
	    // base64 是网络上最常见的用于传输8Bit字节码的编码方式之一
    	return password;
    }
    
    let pwd = "123321";
    MD5(pwd)			  // 对pwd进行一层加密		yIN7I/+Kqoot3pFUc84JkQ==	可轻易在线解密
    MD5(MD5(pwd))		  // 对pwd进行两层层加密		M9o6WW74mkgDA7Zma5Xc4g==	解密相对耗时
    MD5(MD5(MD5(pwd)))	  // 对pwd进行三层层加密		lVKhRjOEZ45+9MVOXHBfYg==	解密困难
    MD5(pwd + MD5(pwd))	  // 组合自定义字符			B3S+VTISt62HgVFcL8m4Yg=		破解失败
    

8. Resumo

Ao armazenar dados confidenciais no banco de dados, nunca use código simples para armazenamento.A função do MD5 é converter o código simples em uma sequência que não possa ser quebrada ao contrário. Isso pode efetivamente impedir que o banco de dados seja invadido e levar ao vazamento direto de dados confidenciais.

Publicado 40 artigos originais · ganhou 31 · visualizações 2766

Acho que você gosta

Origin blog.csdn.net/CodingmanNAN/article/details/104935714
Recomendado
Clasificación