MD5-【验签】
MD5是什么?
- MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。
- MD5到底有什么用?
- 当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。
- package com.mr.util;
- import java.io.File;
- import java.io.FileInputStream;
- import java.security.MessageDigest;
- /**
- * 字节数组转成16进位制数
- */
- public class SecurityUtil {
- /**
- * 把字节数组转成16进位制数
- * @param bytes
- * @return
- */
- public static String bytesToHex(byte[] bytes) {
- StringBuffer md5str = new StringBuffer();
- //把数组每一字节换成16进制连成md5字符串
- int digital;
- for (int i = 0; i < bytes.length; i++) {
- digital = bytes[i];
- if(digital < 0) {
- digital += 256;
- }
- if(digital < 16){
- md5str.append("0");
- }
- md5str.append(Integer.toHexString(digital));
- }
- return md5str.toString().toUpperCase();
- }
- /**
- * 把字节数组转换成md5
- * @param input
- * @return
- */
- public static String bytesToMD5(byte[] input) {
- String md5str = null;
- try {
- //创建一个提供信息摘要算法的对象,初始化为md5算法对象
- MessageDigest md = MessageDigest.getInstance("MD5");
- //计算后获得字节数组
- byte[] buff = md.digest(input);
- //把数组每一字节换成16进制连成md5字符串
- md5str = bytesToHex(buff);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return md5str;
- }
- /**
- * 把字符串转换成md5
- * @param str
- * @return
- */
- public static String strToMD5(String str) {
- byte[] input = str.getBytes();
- return bytesToMD5(input);
- }
- /**
- * 把文件转成md5字符串
- * @param file
- * @return
- */
- public static String fileToMD5(File file) {
- if(file == null) {
- return null;
- }
- if(file.exists() == false) {
- return null;
- }
- if(file.isFile() == false) {
- return null;
- }
- FileInputStream fis = null;
- try {
- //创建一个提供信息摘要算法的对象,初始化为md5算法对象
- MessageDigest md = MessageDigest.getInstance("MD5");
- fis = new FileInputStream(file);
- byte[] buff = new byte[1024];
- int len = 0;
- while(true) {
- len = fis.read(buff, 0, buff.length);
- if(len == -1){
- break;
- }
- //每次循环读取一定的字节都更新
- md.update(buff,0,len);
- }
- //关闭流
- fis.close();
- //返回md5字符串
- return bytesToHex(md.digest());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- }
- 转载原文链接:http://blog.csdn.net/supersnow0622/article/details/7536473
MD5-【验签】的更多相关文章
- python md5验签
import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1×tamp=157319776 ...
- MD5验签同一字符串得到不同的MD5签名值可能问题之一
public static String md555(String plainText) throws UnsupportedEncodingException { byte[] secretByte ...
- ruby md5加签验签方法
# md5签名def md5_sign(data,key) return OpenSSL::Digest::MD5.hexdigest(data+key)end # md5验签def md5_veri ...
- 支付宝App支付签名和验签
代码: using CMS.Utility.ReturnResult; using OAuthWebAPI.Package; using Common; using System; using Sys ...
- 支付接口中常用的加密解密以及验签rsa,md5,sha
一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...
- Delphi微信支付【支持MD5和HMAC-SHA256签名与验签】
作者QQ:(648437169) 点击下载➨微信支付 微信支付api文档 [Delphi 微信支付]支持付款码支付.二维码支付.订单查询.申请退款.退款查询.撤销订单.关闭订单. ...
- Jmeter接口测试-MD5加密-请求验签(完整流程)
第一部分:先准备好Jmeter 1.在开始编写脚本之前,先要确保你的Jmeter能够正常运行.若你还没有安装Jmeter,可参考以下方法: A.Jmeter需要java运行环境,所以需要下载JDK,J ...
- 微信App支付通知验签
微信异步通知: [AcceptVerbs("POST")] public void Notify() { //编码(101-登录无效,102-账号无效,200-成功,201-失败, ...
- RSA签名验签学习笔记
RSA私钥签名时要基于某个HASH算法,比如MD5或者SHA1等.之前我一直认为签名的过程是:先对明文做HASH计算,然后用私钥直接对HASH值加密.最近才发现不是那么简单,需要对HASH后的数据进行 ...
- RSA加密解密及RSA加签验签
RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解 ...
随机推荐
- 运行第一个.net core程序
前置条件 ubuntu已安装.net core运行环境 分6步 mkdir netcore 创建一个项目文件夹 cd netcore 进入该文件夹 dotnet new new命令 用于创建一个 ...
- 事件轮询 event loop
Understanding the node.js event loop The first basic thesis of node.js is that I/O is expensive: So ...
- ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
Thread threadWithParam = new Thread(new ParameterizedThreadStart(new ThreadTest().ShowMsg));//thread ...
- Daemon,Jos,定时器
--> FileSystemWatcher--> EventWaitHandle / AutoResetEvent / ManualResetEvent--> Mutex--> ...
- ML中Boosting和Bagging的比較
说到ML中Boosting和Bagging,他们属于的是ML中的集成学习,集成学习法(Ensemble Learning) ① 将多个分类方法聚集在一起.以提高分类的准确率. (这些算法能够是不同的 ...
- 多线程-Condition
关键字synchronized与wait和notify/notifyAll方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象.Con ...
- Atitit.用户权限服务 登录退出功能
Atitit.用户权限服务 登录退出功能 参数说明 /com.attilax/user/loginOut.jsp?url="+url Utype=mer 作者:: ★(attilax)&g ...
- python学习之with...as语句
python中的with...as...语句类似于try...finally...语句: # -*- coding: utf-8 -*- # """ with...as. ...
- SQL练习题汇总(Sqlserver和Mysql版本)
所需表及数据执行脚本: CREATE TABLE STUDENT (SNO ) NOT NULL, SNAME ) NOT NULL, SSEX ) NOT NULL, SBIRTHDAY DATET ...
- 公共查询类criteria
package cn.edu.hbcf.common.vo; import java.math.BigDecimal; import java.sql.Timestamp; import java.u ...