Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 15992|Resposta: 1

[Tutorial de Segurança] A Tencent também está usando! Sistema anti-adulteração para arquivos web (implementação de criptografia MD5) tutorial anti-hacking

[Copiar link]
Publicado em 20/11/2014 14:04:34 | | | |
MD5Visão geral do algoritmo
MD5A função é para uma informação(mensagem)Gerar resumos de informações(resumo da mensagem), o resumo é único para a informação,Pode ser usado como assinatura digital. Usado para verificar a validade do documento(Se há dados perdidos ou corrompidos),A criptografia da senha do usuário, o valor do hash é calculado na função hash. Insira uma cadeia de bytes de qualquer comprimento para gerar uma128O inteiro do bit. Devido a algumas características irreversíveis do algoritmo, ele possui boa segurança em aplicações de criptografia. eMD5O uso de algoritmos não exige o pagamento de taxas de direitos autorais. Nem a unicidade nem a irreversibilidade são absolutas, analisando-as teoricamente como uma relação muitos-para-um, mas a probabilidade de duas informações diferentes produzirem o mesmo resumo é pequena. Irreversível significa que a quantidade de computação e tempo de computação necessária para deduzir a entrada da saída é grande demais, e o método de busca por dicionários exige muito espaço de armazenamento.
TeiaSistemaIdeias de design
Este sistema é baseado no Java Web, e com a ajuda destrut2para alcançar isso. A ideia básica do design é passarWebpágina para calcular um arquivo na memória externa do sistema duas vezesMD5valor, e comparar, se for o mesmo, o arquivo não foi adulterado; se for diferente, significa que o arquivo foi adulterado.
TeiaArquivo de versão ideias detalhadas de design do sistema à prova de adulteração: aprovadoJSPRecupere um arquivo que precisa ser calculado na memória externa do sistema.JSPApós submeter, passestrut2deAçãoPular para com valoresJavacamada lógica. na camada lógicaAçãoChamada médiadaométodos,daoO cálculo é encapsuladoMD5valor.DaoMétodoJSPDocumentos que chegam e calculadorasMD5Após a conclusão do cálculo, retorne o caminho original do valorAçãoEsta é a primeira vez que um arquivo é calculadoMD5Valor, Salve emSessão, para que possa ser comparado com o segundoMD5Valores. Após a primeira execução bem-sucedida, pule paraSucessopágina. Agora comece a segunda vez no arquivoMD5Cálculo, também pelo método acima. Após o cálculoMD5Após o valor, o segundo tempo é calculadoMD5O valor é o mesmo do primeiro calculado e é salvo emSessãoSe os valores forem os mesmos, não há mudança. Se for diferente, significa que foi adulterado.
Implementação do sistema
Passo 1,Index.jspCódigo-fonte em
<!-- Index.jspAdicione arquivos do armazenamento do sistema aqui-->
                <center>
                        <form action="fileCrypt" método = get">
                                <table>
                                        <tr>
                                                <td>Nome do arquivo:</td>
                                                <td><tipo de entrada="nome do arquivo"Md5FilesEntity.nomefile" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Passo 2,SuportesO código-fonte no arquivo de configuração
<!-- suportes2Arquivos de configuração-->
<struts>
        <valor constante="verdadeiro" nome="struts.devMode" />
        <valor constante="zh_CN" nome="struts.locale" />
        <valor constante="utf-8" nome="struts.i18n.encoding" />
       
        <nome do pacote="padrão" estende="struts-default">
                <nome da ação="mdeAção" class="com.crypt.action.mdeAção"
                        metodologia="codeCrype">
                        <nome do resultado="sucesso">/index.jsp</result>
                </action>
                <nome da ação="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <nome do resultado="sucesso">/success.jsp</result>
                </action>
                <nome da ação="fileCrypt2" class="com.crypt.action.FilesCryptAction" método ="SetCrypt2">
                        <nome do resultado="sucesso">/FilnallySuccess.jsp</result>
                        <nome do resultado="fail">/fail.jsp</result>
                </action>
</struts>   
O terceiro passo é pular para o FilesCryptAction após o struts2
pacote com.crypt.action;
importar java.io.IOException;
import javax.servlet.http.Http.HttpServletRequest;
importar javax.servlet.http.HttpHttpSession;
import org.apache.struts2.ServletActionContext;
importação com.crypt.dao.Md5_dao;
importar com.opensymphony.xwork2.ActionSupport;
importar com.crypt.entity.Md5FilesEntity;
a classe pública FilesCryptAction estende o ActionSupport {
        privado Md5FilesEntityM Md5FilesEntity = novo Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        o public String execute() lança IOException {
                String fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //A primeira vez que foi calculadoMD5O valor é temporário salvo emSessãoMédia
                } captura (Exceção e) {
                        TODO Bloco de captura gerado automaticamente
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                retorno "sucesso";
        }
        public String SetCrypt2() {
                String fileCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } captura (Exceção e) {
                        TODO Bloco de captura gerado automaticamente
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        retorno "sucesso";
                } else {
                        devolver "fail";
                }
        }
}
          
No quarto passo, a ação começa a saltar para a Md5_dao com valores
pacote com.crypt.dao;
importação com.crypt.md5.Md5Crypt_1;
importação com.crypt.md5.Md5Crypt_2;
classe pública Md5_dao {
        String estático público getFileCode(String fileName) lança Exception {
                System.out.println(nomedo do arquivo);
                String hashCode = Md5Crypt_1.getHash(nomeArquivo, "MD5");
                System.out.println(hashCode);
                retorne hashCode;
        }
}       
O quinto passo é criar uma API no sistema para calcular o valor MD5 de um arquivo, então chame-o diretamente no DAO, e agora ele é processado diretamente no método Md5Crypt_1
pacote com.crypt.md5;
importação java.io.*;
importar java.security.*;
classe pública Md5Crypt_1 {
        caráter estático público[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) throws Exception {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        String estática pública getHash(Nome do arquivo String, Tipo de hash de string)
                        throws Exception {
                InputStream fis;
                fis = novo FileInputStream(fileName);
                Buffer de byte[] = novo byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                enquanto ((numRead = fis.read(buffer)) > 0) {
                        md5.update (buffer, 0, numRead);
                }
                fis.close();
                retorne para HexString(md5.digest());
        }
        Public static String toHexString(byte[] b) {
                StringBuilder sb = novo StringBuilder(b.length * 2); //Construa um gerador de string e inicialize no conteúdo especificado da string
                para (int i = 0; Eu < B.Length; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); AnexarOs métodos sempre adicionam esses caracteres ao final do gerador
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Passo 6: Após calcular com sucesso o valor de MD5 do arquivo, o primeiro MD5 é armazenado na sessão em ação e, através da configuração do arquivo de configuração struts2, pula para o seccess.jsp, exibe o valor MD5 calculado pela primeira vez e solicita iniciar o segundo cálculo:
Código-fonte em Success.jsp:
<body>
   A primeira vez que foi calculadoMD5O valor é:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterador>
       
                <center>
                        <form action="fileCrypt2" método="get">
                                <table>
                                        <tr>
                                                <td>Nome do arquivo:</td>
                                                <td><tipo de entrada="nome do arquivo"Md5FilesEntity.nomefile" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rows="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterador>
        </textarea>
                        </form>
                </center>
  </body>
Passo 7: Comece a segunda submissão e calculeMD5O valor é calculado novamente após o cálculo novamente, de acordo com o processo acimaMD5O valor é comparado com o valor da primeira vez, se for duas vezesMD5        Se for a mesma coisa, significa que não há adulteração; Se duas vezesMD5Se o valor for diferente, o documento foi adulterado. Assim, todo o sistema é concluído.
Teste de sistemas à prova de adulteração de documentos
Coloque o sistema no suporteTomAct 6.0Venha e percebaWebCorra. Abaixo está um diagrama de teste do sistema:
Passo 1: Adicione os arquivos que precisam ser calculados. E reprimir"Início" para começar a calcular.

O segundo passo é calculadoMD5, emsuccess.jspmostra o primeiro calculadoMD5valor e exibição. Um segundo cálculo também é solicitado para determinar se foi adulterado.

O terceiro passo é realizar um segundo cálculo sem adulterar o documentoMD5valor. Se não houver adulteração, a página sem o salto será saltada diretamente e o "arquivo não foi adulterado" será exibido. Se foi adulterado, mostrará que o documento foi adulterado.



Passo 4: Faça alterações no arquivo e repita o teste acima
Primeiro cálculo:


Após o cálculo ser bem-sucedido:

O quinto passo é manipular deliberadamente o documento e calculá-lo. Em princípio, o documento é adulterado e calculado duas vezesMD5Não, ao comparar, você deve ser informado de que o arquivo foi adulterado.


Neste ponto, os testes de todo o sistema são concluídos.







Anterior:A Associação de Empreendedores Excepcionais realizou a atividade "Reciclagem de Resíduos, Utilização de Recursos"
Próximo:[C#] 12306 A base para a captura de ingressos é realizada
Publicado em 20/11/2014 14:13:20 |
douto
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com