`
baby69yy2000
  • 浏览: 187871 次
  • 性别: Icon_minigender_1
  • 来自: 自己输入城市...
社区版块
存档分类
最新评论

[转]JAVA版文件MD5生成器

    博客分类:
  • Java
阅读更多
做文件传输的时候,为了保证文件是合法的有效的,经常会对文件做MD5校验,以确保和原始的文件是一样的.并且做断点续传的时候这一点也是挺重要的,其实JAVA处理这方面也挺不错的,可是我搜了半天,也没有搜到一个用JAVA写的文件MD5生成程序,有的也只是命令行模式下的,没有一个GUI模式的,所以就写了一个GUI的,方便使用,只用了两个类,一个是工具类,除了生成MD5外还可以生成SHA码,大家可以通过改源文件达到这一点,并且文件支持拖放,可以把要生成的文件拖到文本区,就可以显示这个文件的信息了.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test1; 

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JProgressBar;

/**
 *
 * @author hadeslee
 */
public final class Util {

    /**
     * 得到文件的MD5码,用于校验
     * @param file
     * @param jpb 
     * @return
     */
    public static String getMD5(File file, JProgressBar jpb) {
        FileInputStream fis = null;
        jpb.setMaximum((int) file.length());
        jpb.setValue(0);
        jpb.setString("正在计算:" + file.getName() + "的MD5值");
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            fis = new FileInputStream(file);
            byte[] buffer = new byte[8192];
            int length = -1;
            System.out.println("开始算");
            int value = 0;
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
                value += length;
                jpb.setValue(value);
            }
            System.out.println("算完了");
            return bytesToString(md.digest());
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * 
     * @param file
     * @return
     */
    public static String getMD5(File file) {
        FileInputStream fis = null;
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            fis = new FileInputStream(file);
            byte[] buffer = new byte[8192];
            int length = -1;
            System.out.println("开始算");
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
            }
            System.out.println("算完了");
            return bytesToString(md.digest());
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * 得到文件的SHA码,用于校验
     * @param file
     * @return
     */
    public static String getSHA(File file) {
        FileInputStream fis = null;
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            fis = new FileInputStream(file);
            byte[] buffer = new byte[8192];
            int length = -1;
            System.out.println("开始算");
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
            }
            System.out.println("算完了");
            return bytesToString(md.digest());
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    /**
     * 
     * @param file
     * @param jpb
     * @return
     */
    public static String getSHA(File file,JProgressBar jpb) {
        FileInputStream fis = null;
        jpb.setMaximum((int) file.length());
        jpb.setValue(0);
        jpb.setString("正在计算:" + file.getName() + "的MD5值");
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            fis = new FileInputStream(file);
            byte[] buffer = new byte[8192];
            int length = -1;
            System.out.println("开始算");
            int value=0;
            while ((length = fis.read(buffer)) != -1) {
                md.update(buffer, 0, length);
                value+=length;
                jpb.setValue(value);
            }
            System.out.println("算完了");
            return bytesToString(md.digest());
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public static String bytesToString(byte[] data) {
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
                'e', 'f'};
        char[] temp = new char[data.length * 2];
        for (int i = 0; i < data.length; i++) {
            byte b = data[i];
            temp[i * 2] = hexDigits[b >>> 4 & 0x0f];
            temp[i * 2 + 1] = hexDigits[b & 0x0f];
        }
        return new String(temp);

    }

    public static void main(String[] args) {
        String s = System.getProperties().getProperty("java.io.tmpdir");
        System.out.println(s);
    }
}


窗体的代码:
*
 * Main.java
 *
 * Created on 2007年11月8日, 上午9:15
 */
package test1;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.UIManager;

/**
 *
 * @author  hadeslee
 */
public class Main extends javax.swing.JFrame implements DropTargetListener {

    private JFileChooser jfc;
    private File toMd5;
    private DropTarget dt;
    /** Creates new form Main */

    public Main() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception exe) {
            exe.printStackTrace();
        }
        initComponents();
        initOther();
        this.setLocationRelativeTo(null);
    }

    private void initOther() {
        dt = new DropTarget(jTextArea1, DnDConstants.ACTION_COPY_OR_MOVE, this);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jpb = new javax.swing.JProgressBar();
        jLabel2 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("MD5生成");
        setResizable(false);

        jLabel1.setText("文件路径:");

        jTextField1.setEditable(false);

        jButton1.setText("浏览");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("文件信息"));

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton2.setText("生成");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("退出");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jLabel2.setText("MD5值:");

        jTextField2.setEditable(false);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jpb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField2))
                    .addComponent(jScrollPane1)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 246, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton1)))
                .addContainerGap(16, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jButton3)
                    .addComponent(jpb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(267, 267, 267)
                .addComponent(jButton2)
                .addGap(10, 10, 10))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        if (jfc == null) {
            jfc = new JFileChooser();
            jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        }
        if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            toMd5 = jfc.getSelectedFile();
            jTextField1.setText(toMd5.toString());
            showFileInfo();
        }
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jButton2.setEnabled(false);
        new Thread(){
            public void run(){
                String s=Util.getMD5(toMd5, jpb);
                jTextField2.setText(s);
                jButton2.setEnabled(true);
            }
        }.start();
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        System.exit(0);
    }

    private void showFileInfo() {
        if (toMd5 != null) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            File f = toMd5;
            StringBuilder sb = new StringBuilder();
            sb.append("文件名称:").append(f.getName()).append('\n');
            sb.append("文件大小:").append(f.length()).append('\n');
            sb.append("文件最后修改日期:").append(sdf.format(new Date(f.lastModified()))).append("\n");
            sb.append("文件属性:").append(f.canWrite() ? "读写" : "只读").append('\n');
            jTextArea1.setText(sb.toString());
        }
    }
    /**
     * @param args the command line arguments
     */

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

                    public void run() {
                        new Main().setVisible(true);
                    }
                });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JProgressBar jpb;
    // End of variables declaration

    public void dragEnter(DropTargetDragEvent dtde) {
        dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
    }

    public void dragOver(DropTargetDragEvent dtde) {
    }

    public void dropActionChanged(DropTargetDragEvent dtde) {
    }

    public void dragExit(DropTargetEvent dte) {
    }

    public void drop(DropTargetDropEvent e) {
        try {
            if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                Transferable tr = e.getTransferable();
                e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                @SuppressWarnings("unchecked")
                java.util.List<File> list = (java.util.List<File>) tr.getTransferData(DataFlavor.javaFileListFlavor);
                if (list.size() == 1) {
                    File f = list.get(0);
                    if (f.isFile()) {
                        toMd5 = list.get(0);
                        this.showFileInfo();
                        jTextField1.setText(toMd5.toString());
                    }
                }
                e.dropComplete(true);
            }else {
                e.rejectDrop();
            }
        } catch ( IOException io) {
            io.printStackTrace();
            e.rejectDrop();
        } catch ( UnsupportedFlavorException ufe) {
            ufe.printStackTrace();
            e.rejectDrop();
        }
    }
}


0x0f什么意思?
0x的意思就是16进制数(别告诉我这都不知道) 

0f=15,所以0x0f就是表示一个16进制的数字,值15 

char *pattern[8]  表示的是一个数组指针,就是一个8个大小的数组,成员都是char*指针 

所以总的来说就是给一个char* 数组赋值,初始化为0x0f
分享到:
评论

相关推荐

    MD5生成器源码

    在压缩包中的"md5"文件可能是该MD5生成器的源代码,可能包含上述提到的算法实现和功能。通过阅读和理解这些源代码,开发者可以学习到如何在自己的项目中实现MD5哈希计算,或者进一步改进这个生成器,比如增加多线程...

    Java MD5生成器

    Java MD5生成器是一种在Java编程环境中用于计算字符串或文件哈希值的工具。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六进制数字表示。在软件...

    MD5Maker-MD5生成器

    MD5Maker是一款基于Java开发的MD5生成器工具,它主要用于计算文件或字符串的MD5哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,设计用于产生一个128位(16字节)的散列值。这个散列值通常...

    生成二维码和MD5

    是我平时常用工具的大集合,包括百度一键分享,color格式转化,日期转化,生成二维码,文本比较,生成MD5,请求参数处理 等 运行方法:java -jar share-0.0.3.1-SNAPSHOT.jar

    生成md5码的工具

    标题中的“生成md5码的工具”是指一种软件或应用程序,能够帮助用户快速计算出文件的MD5值。这种工具通常具有用户友好的界面,只需选择要检测的文件,它就能自动计算并显示该文件的MD5摘要。描述中的“超级好用”...

    MD5码生成工具

    总的来说,MD5码生成工具是IT领域中一个实用的辅助工具,Java程序员可以借助如`MD5Gene.java`这样的代码来便捷地实现MD5码的计算。然而,需要注意的是,由于MD5的安全性问题(容易出现碰撞),在密码学等领域,MD5...

    JAVA工具类(整合,xml,json,MD5,加密解密)

    本资源提供的"JAVA工具类"整合了XML处理、JSON操作、MD5加密以及加解密功能,对提高开发效率大有裨益。 1. **XML处理**: - DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它...

    查看文件MD5值的程序

    具体到这个“查看文件MD5值的程序”,可能是用某种编程语言实现的一个小型应用,用户可以指定文件路径,程序则会计算并显示文件的MD5值。这样的程序对于日常文件管理、数据验证等任务非常实用,尤其适合非专业人员...

    数字签名验证(MD5工具)

    任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...

    MD5-java.txt

    1. **生成盐**:通过随机数生成器创建一个16位长度的随机字符串作为盐。 2. **合并密码与盐**:将原始密码与盐拼接在一起。 3. **计算散列值**:使用MD5算法计算合并后的字符串的散列值。 4. **重新排列散列值与盐**...

    生成二维码--.md

    根据给定的信息,本文将详细解释“生成二维码”的相关知识点,包括如何利用Java代码生成二维码、JavaScript库QRCode的使用方法及其应用场景。 ### 一、二维码简介 二维码(Quick Response Code),是一种矩阵式二...

    Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法

    总结来说,Java实现文本文件MD5加密并FTP上传至远程主机涉及以下几个关键步骤: 1. 使用`MessageDigest`计算文件的MD5哈希。 2. 使用Apache Commons Net的FTPClient进行文件上传。 3. 在前端页面收集用户输入,校验...

    MD5-Generator:易于使用的GUI Java md5生成器

    1. **用户界面**:使用Java Swing或JavaFX库构建,提供简洁的界面让用户输入文件路径或直接粘贴文本,并展示生成的MD5哈希值。 2. **文件读取**:读取用户指定的文件内容,确保无论文件大小,都能正确计算MD5值。 3....

    md5sum:MD5校验和生成器和校验器

    MD5校验和生成器和校验器 用法:生成md5校验和:./file -generate / directory / of / files /再次检查原始md5校验和:./file -check / directory / of / files / location_to_original_md5 md5哈希值的生成顺序很...

    代码生成器JAVA

    对于“代码生成器JAVA”,ReadMe.md文件应详细说明如何安装和使用这个工具,包括必要的系统需求、依赖库和示例用法。 `.project`文件是Eclipse项目的配置文件,包含了项目类型、构建路径、Natures(项目特性)等...

    Java一键生成代码到controller层【源码】

    适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis plus,mysql,freemarker等java技术有基本应用。 3、可大大提高开发效率,数据表创建完以后,...5、操作手册参见项目中的README.md文件

    Java流(文件读写操作)

    ### Java流(文件读写操作) #### 一、流的分类 Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入...

    富文本编辑器生成的含有图片的内容转换成word文档 java 后端下载

    5. **插入图片**:将base64或网络图片文件作为图片流插入到Word文档的相应位置。 6. **设置样式和格式**:根据需要调整文本样式,如字体、字号、颜色,以及图片大小和位置。 7. **生成下载响应**:完成内容插入后...

Global site tag (gtag.js) - Google Analytics