-------------------解密---------------------------

package com.drawthink.platform.util;

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.Arrays;public classMyMD5Util {private static final String HEX_NUMS_STR="0123456789ABCDEF";private static final Integer SALT_LENGTH = 12;/**

* 将16进制字符串转换成字节数组

* @param hex

* @return*/

public static byte[] hexStringToByte(String hex) {int len = (hex.length() / 2);byte[] result = new byte[len];char[] hexChars =hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;

result[i]= (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4

| HEX_NUMS_STR.indexOf(hexChars[pos + 1]));

}returnresult;

}/**

* 将指定byte数组转换成16进制字符串

* @param b

* @return*/

public static String byteToHexString(byte[] b) {

StringBuffer hexString= newStringBuffer();for (int i = 0; i < b.length; i++) {

String hex= Integer.toHexString(b[i] & 0xFF);if (hex.length() == 1) {

hex= '0' +hex;

}

hexString.append(hex.toUpperCase());

}returnhexString.toString();

}/**

* 验证口令是否合法

* @param password

* @param passwordInDb

* @return

* @throws NoSuchAlgorithmException

* @throws UnsupportedEncodingException*/

public staticboolean validPassword(String password, String passwordInDb)throws NoSuchAlgorithmException, UnsupportedEncodingException {//将16进制字符串格式口令转换成字节数组

byte[] pwdInDb =hexStringToByte(passwordInDb);//声明盐变量

byte[] salt = new byte[SALT_LENGTH];//将盐从数据库中保存的口令字节数组中提取出来

System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);//创建消息摘要对象

MessageDigest md = MessageDigest.getInstance("MD5");//将盐数据传入消息摘要对象

md.update(salt);//将口令的数据传给消息摘要对象

md.update(password.getBytes("UTF-8"));//生成输入口令的消息摘要

byte[] digest =md.digest();//声明一个保存数据库中口令消息摘要的变量

byte[] digestInDb = new byte[pwdInDb.length -SALT_LENGTH];//取得数据库中口令的消息摘要

System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);//比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

if(Arrays.equals(digest, digestInDb)) {//口令正确返回口令匹配消息

return true;

}else{//口令不正确返回口令不匹配消息

return false;

}

}/**

* 获得加密后的16进制形式口令

* @param password

* @return

* @throws NoSuchAlgorithmException

* @throws UnsupportedEncodingException*/

public staticString getEncryptedPwd(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {//声明加密后的口令数组变量

byte[] pwd = null;//随机数生成器

SecureRandom random = newSecureRandom();//声明盐数组变量

byte[] salt = new byte[SALT_LENGTH];//将随机数放入盐变量中

random.nextBytes(salt);//声明消息摘要对象

MessageDigest md = null;//创建消息摘要

md = MessageDigest.getInstance("MD5");//将盐数据传入消息摘要对象

md.update(salt);//将口令的数据传给消息摘要对象

md.update(password.getBytes("UTF-8"));//获得消息摘要的字节数组

byte[] digest =md.digest();//因为要在口令的字节数组中存放盐,所以加上盐的字节长度

pwd = new byte[digest.length +SALT_LENGTH];//将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐

System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);//将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节

System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);//将字节数组格式加密后的口令转化为16进制字符串格式的口令

returnbyteToHexString(pwd);

}//测试方法

public static voidmain(String[] args) {try{

String password= "5a105e8b9d40e1329780d62ea2265d8a";

boolean encryptedPwd=MyMD5Util.validPassword(password,password);

System.out.println(encryptedPwd);

}catch (NoSuchAlgorithmException |UnsupportedEncodingException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

messagedigest 图片加密_MessageDigest 加密和解密2相关推荐

  1. 基于Python实现 图片的Base64加密与解密

    看到以iBV开头的乱码99.99%的情况下是图片的Baes64加密,例如 图片转Base64 import base64 # 对图片进行二进制B64加密 # 看到iBV 99%的情况下是png经过ba ...

  2. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]221.加密马赛克图像处理与解密复原 9. 图像的马赛克处理 马赛克效果是广泛使用的 ...

  3. AES加密解密SHA1、SHA加密MD5加密

    AES加密解密 SHA1.SHA加密 MD5加密 二话不说马上附上代码: package com.luo.util; import java.io.UnsupportedEncodingExcepti ...

  4. Python实现各种加密,接口加解密不说难

    Hi,大家好.我们在接口自动化测试项目中,有时候需要一些加密.今天给大伙介绍Python实现各种加密,接口加解密再也不愁. 目录 一.项目加解密需求分析 二.Base64加密 三.MD5加密 四. s ...

  5. 分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论

    转载自分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 原文无法显 ...

  6. 针对被易赛通数据泄露防护客户端加密的文件的解密思路

    由于工作上所接触到的数据的特殊性 , 公司要求电脑上必须加装"易赛通数据泄露防护客户端" , 导致很多常用格式的文件都被加密了 , 文件拷贝到未装易赛通的电脑上打开就是乱码甚至像. ...

  7. [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)

    标 题: [原创]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密) 作 者: rick 时 间: 2006-09-29,23:16:28 链 接: http://bbs.pediy. ...

  8. python后端开发框架加密_Flask框架实现的前端RSA加密与后端Python解密功能详解

    本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username ...

  9. .net实现md5加密 sha1加密 sha256加密 sha384加密 sha512加密 des加密解密

    写项目时,后台一直用md5加密,一天群里人问,除了MD5还有其它的加密方法吗?当时只知道还有个SHA,但怎么实现什么的都不清楚,于是当网上找了下,把几种常见的加密方法都整理了下,用winform写了个 ...

最新文章

  1. java独立承担,Java使用独立文件服务器
  2. javascript es6 特性简介
  3. 输入两个整数a和b,计算a+b的和
  4. find排除文件 linux_Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键...
  5. How to put S4 extension field to CRM WebUI search view in the design time
  6. laravel方法汇总详解
  7. java定义私有变量_java – 为什么在类中声明变量私有?
  8. paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
  9. 研究手机直播流媒体框架
  10. COVID-19 AI-related Technical Paper
  11. Xcode6 app沙盒目录
  12. 智慧供热管理系统提高居民用热的智能化
  13. break语句和continue语句的区别
  14. mysql 1067 abouting_GitHub - chenxiao07150808/MySQL
  15. 最小生成树之Prim(普里姆)算法
  16. 阿里云大学安全课程-阿里云首席安全研究员吴瀚清:WannaCry事件最“细思恐极“的一个事实是?
  17. 利用FlieZilla实现虚拟机和本地数据交互
  18. TCP数据发送之TSO/GSO
  19. 用python的tkinter库制作仿windows看图器
  20. ARM的SVC、IRQ和FIQ模式。

热门文章

  1. 如何一键部署项目、代码自动更新
  2. BZOJ 2003 [Hnoi2010]Matrix 矩阵
  3. 零元学Expression Blend 4 - Chapter 25 以Text相关功能就能简单做出具有设计感的登入画面...
  4. 512M内存编译php出错
  5. poxtfix+dovecot+saslauthd+courier-authlib +mysql + extmail 完整虚拟邮箱系统部署
  6. dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
  7. Yeslab现任明教教主ISE课程前七部分免费发布
  8. leetcode1254. 统计封闭岛屿的数目(dfs)
  9. web图像_Web图像优化的基本介绍
  10. mongo 删除节点_将生产节点/ Express Mongo App部署到AWS —反思