MD5是什么?

  1. MD5message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。
  2. MD5到底有什么用?
  3. 当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。
  1. package com.mr.util;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.security.MessageDigest;
  6.  
  7. /**
  8. * 字节数组转成16进位制数
  9. */
  10. public class SecurityUtil {
  11. /**
  12. * 把字节数组转成16进位制数
  13. * @param bytes
  14. * @return
  15. */
  16. public static String bytesToHex(byte[] bytes) {
  17. StringBuffer md5str = new StringBuffer();
  18. //把数组每一字节换成16进制连成md5字符串
  19. int digital;
  20. for (int i = 0; i < bytes.length; i++) {
  21. digital = bytes[i];
  22. if(digital < 0) {
  23. digital += 256;
  24. }
  25. if(digital < 16){
  26. md5str.append("0");
  27. }
  28. md5str.append(Integer.toHexString(digital));
  29. }
  30. return md5str.toString().toUpperCase();
  31. }
  32.  
  33. /**
  34. * 把字节数组转换成md5
  35. * @param input
  36. * @return
  37. */
  38. public static String bytesToMD5(byte[] input) {
  39. String md5str = null;
  40. try {
  41. //创建一个提供信息摘要算法的对象,初始化为md5算法对象
  42. MessageDigest md = MessageDigest.getInstance("MD5");
  43. //计算后获得字节数组
  44. byte[] buff = md.digest(input);
  45. //把数组每一字节换成16进制连成md5字符串
  46. md5str = bytesToHex(buff);
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. return md5str;
  51. }
  52. /**
  53. * 把字符串转换成md5
  54. * @param str
  55. * @return
  56. */
  57. public static String strToMD5(String str) {
  58. byte[] input = str.getBytes();
  59. return bytesToMD5(input);
  60. }
  61.  
  62. /**
  63. * 把文件转成md5字符串
  64. * @param file
  65. * @return
  66. */
  67. public static String fileToMD5(File file) {
  68. if(file == null) {
  69. return null;
  70. }
  71. if(file.exists() == false) {
  72. return null;
  73. }
  74. if(file.isFile() == false) {
  75. return null;
  76. }
  77. FileInputStream fis = null;
  78. try {
  79. //创建一个提供信息摘要算法的对象,初始化为md5算法对象
  80. MessageDigest md = MessageDigest.getInstance("MD5");
  81. fis = new FileInputStream(file);
  82. byte[] buff = new byte[1024];
  83. int len = 0;
  84. while(true) {
  85. len = fis.read(buff, 0, buff.length);
  86. if(len == -1){
  87. break;
  88. }
  89. //每次循环读取一定的字节都更新
  90. md.update(buff,0,len);
  91. }
  92. //关闭流
  93. fis.close();
  94. //返回md5字符串
  95. return bytesToHex(md.digest());
  96. } catch (Exception e) {
  97. e.printStackTrace();
  98. }
  99. return null;
  100. }
  101. }
  102.  
  103. 转载原文链接:http://blog.csdn.net/supersnow0622/article/details/7536473

MD5-【验签】的更多相关文章

  1. python md5验签

    import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1&timestamp=157319776 ...

  2. MD5验签同一字符串得到不同的MD5签名值可能问题之一

    public static String md555(String plainText) throws UnsupportedEncodingException { byte[] secretByte ...

  3. ruby md5加签验签方法

    # md5签名def md5_sign(data,key) return OpenSSL::Digest::MD5.hexdigest(data+key)end # md5验签def md5_veri ...

  4. 支付宝App支付签名和验签

    代码: using CMS.Utility.ReturnResult; using OAuthWebAPI.Package; using Common; using System; using Sys ...

  5. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...

  6. Delphi微信支付【支持MD5和HMAC-SHA256签名与验签】

    作者QQ:(648437169) 点击下载➨微信支付            微信支付api文档 [Delphi 微信支付]支持付款码支付.二维码支付.订单查询.申请退款.退款查询.撤销订单.关闭订单. ...

  7. Jmeter接口测试-MD5加密-请求验签(完整流程)

    第一部分:先准备好Jmeter 1.在开始编写脚本之前,先要确保你的Jmeter能够正常运行.若你还没有安装Jmeter,可参考以下方法: A.Jmeter需要java运行环境,所以需要下载JDK,J ...

  8. 微信App支付通知验签

    微信异步通知: [AcceptVerbs("POST")] public void Notify() { //编码(101-登录无效,102-账号无效,200-成功,201-失败, ...

  9. RSA签名验签学习笔记

    RSA私钥签名时要基于某个HASH算法,比如MD5或者SHA1等.之前我一直认为签名的过程是:先对明文做HASH计算,然后用私钥直接对HASH值加密.最近才发现不是那么简单,需要对HASH后的数据进行 ...

  10. RSA加密解密及RSA加签验签

    RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解 ...

随机推荐

  1. 运行第一个.net core程序

    前置条件 ubuntu已安装.net core运行环境 分6步 mkdir netcore 创建一个项目文件夹 cd netcore   进入该文件夹 dotnet new  new命令 用于创建一个 ...

  2. 事件轮询 event loop

    Understanding the node.js event loop The first basic thesis of node.js is that I/O is expensive: So ...

  3. ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数

    Thread threadWithParam = new Thread(new ParameterizedThreadStart(new ThreadTest().ShowMsg));//thread ...

  4. Daemon,Jos,定时器

    --> FileSystemWatcher--> EventWaitHandle / AutoResetEvent / ManualResetEvent--> Mutex--> ...

  5. ML中Boosting和Bagging的比較

    说到ML中Boosting和Bagging,他们属于的是ML中的集成学习,集成学习法(Ensemble Learning) ①  将多个分类方法聚集在一起.以提高分类的准确率. (这些算法能够是不同的 ...

  6. 多线程-Condition

    关键字synchronized与wait和notify/notifyAll方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象.Con ...

  7. Atitit.用户权限服务 登录退出功能

    Atitit.用户权限服务 登录退出功能 参数说明 /com.attilax/user/loginOut.jsp?url="+url Utype=mer 作者::  ★(attilax)&g ...

  8. python学习之with...as语句

    python中的with...as...语句类似于try...finally...语句: # -*- coding: utf-8 -*- # """ with...as. ...

  9. SQL练习题汇总(Sqlserver和Mysql版本)

    所需表及数据执行脚本: CREATE TABLE STUDENT (SNO ) NOT NULL, SNAME ) NOT NULL, SSEX ) NOT NULL, SBIRTHDAY DATET ...

  10. 公共查询类criteria

    package cn.edu.hbcf.common.vo; import java.math.BigDecimal; import java.sql.Timestamp; import java.u ...